⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asflip.as

📁 as3.0 翻书效果
💻 AS
📖 第 1 页 / 共 2 页
字号:
			this.pages.flip.fmask.page.y = this.pageN.y;
			this.pages.flip.fmask.page.pf.x = this.pageN.pf.x;
			this.pages.flip.fmask.page.pf.y = this.pageN.pf.y;
			this.pages.flip.fmask.page.rotation = this.pageN.rotation;
			
		}
		
		/**
		* //hardflip calc
		* @param	obj
		* @param	Mx
		* @return
		*/
		private function scalc(obj:*,Mx:Number):void {	
			if(Mx<-pw){
				Mx=-this.pw;
			}
			if(Mx>pw){
				Mx=this.pw;
			}
			var a:Number = Math.asin( Mx/this.pw );
			var rot:Number = a/AM/2;
			var xs:Number = 100;
			var ss:Number = 100*Math.sin( rotz*this.AM );
			Mx = Mx/2;
			
			var My:Number = Math.cos(a)*(this.pw/2)*(ss/100);
			
			this.placeImg(obj, rot, ss, Mx, My)
			
			this.pages.pgrad.visible = this.pages.flip.visible = true;
			this.pages.pgrad.scaleX = Mx/100;
			this.pages.pgrad.alpha = this.pages.flip.p3shadow.alpha = 1.0;
			
			this.pages.flip.p3shadow.scaleX = -Mx/100;
			this.pages.flip.p3shadow.x = 0;
			this.pages.flip.p3shadow.y = 0;
			this.pages.flip.p3shadow.rotation = 0;
			
			this.pages.pgrad.x = 0;
			this.pages.pgrad.y = 0;
			this.pages.pgrad.rotation = 0;
		}
		
		/**
		* 
		* @param	j
		* @param	rot
		* @param	ss
		* @param	Mx
		* @param	My
		* @return
		*/
		private function placeImg(j, rot:Number, ss:Number, Mx:Number, My:Number):void {
			var m:Number = Math.tan( rot*this.AM );
			var f:Number = Math.SQRT2/Math.sqrt(m*m+1);
			var phxs:Number = 100*m;
			var phRot:Number = -rot;;
			
			var xs:Number = 100*f;
			var ys:Number = 100*f;
			
			j.ph.pic.rotation = 45;
			j.ph.pic.scaleX = (phxs<0)? - xs/100: xs/100;
			j.ph.pic.scaleY = ys/ss;
			j.ph.rotation = phRot;
			j.ph.scaleX = phxs/100;
			j.scaleY = ss/100;
			j.x = Mx;
			j.y = My;
			j.visible = true;
			
		}
		
		/**
		* 
		* @param	p1
		* @param	p2
		* @param	p3
		* @param	p4
		*/
		private function setPages(p1:int,p2:int,p3:int,p4:int) {
			var p0:int = p1-2;						
			var p5:int = p4+2;
			if(p0<0) {
				p0=0;
			}
			if(p5>this.maxpage){
				p5=0;
			}
			
			if(p1<0){
				p1=0;
			}
			if(p2<0){
				p2=0;
			}
			if(p3<0){
				p3=0;
			}
			if(p4<0){
				p4=0;
			}
			
			
			this.dispatchEvent(new FlipEvent(FlipEvent.FLIPPING,new FlippingEventArg(p1,p4,this.maxpage)));
			trace("setpages ->"+p1+","+p2+","+p3+","+p4+","+this.maxpage);
			
			
			this.pages.p1.page.pf.ph.removeChildAt(0);
			this.pleft = this.pages.p1.page.pf.ph.addChildAt(PageFactory.Create(p1),0);
			
			
			this.pages.p1.page.pf.ph.y = -this.ph/2;
			
			if(this.transparency) {
				
				
				this.pages.p0.page.pf.ph.removeChildAt(0)
				this.pleftb = this.pages.p0.page.pf.ph.addChildAt(PageFactory.Create(p0),0);
				
				
				this.pages.p0.page.pf.ph.y = -this.ph/2;
				
			} else{
				this.pages.p0.visible = false;
			}
			
/*			if(this.hflip) {	
				
				var sprite:Sprite=new sph();
				sprite.name="sp2";
				this.pages.flip.hfliph.removeChildAt(0)
				var tm:*= this.pages.flip.hfliph.addChildAt(sprite,0);
				
				
				tm.ph.pic.removeChildAt(0);
				this.sp2 = tm.ph.pic.addChildAt(PageFactory.Create(p2),0);
				this.sp2.y = -this.ph/2;
				this.sp2.x = -this.pw/2;
				
				this.sp2 = this.pages.flip.hfliph.getChildByName("sp2");
				
				sprite=new sph();
				sprite.name="sp3";
				this.pages.flip.hfliph.removeChildAt(0)
				tm = this.pages.flip.hfliph.addChildAt(sprite,0);
				
				
				tm.ph.pic.removeChildAt(0)
				this.sp3 = tm.ph.pic.addChildAt(PageFactory.Create(p3),0);
				this.sp3.y = -this.ph/2;
				this.sp3.x = -this.pw/2;
				
				this.sp3 = this.pages.flip.hfliph.getChildByName("sp3");
				
			} else {*/
				
				var mc:*=pages.flip.hfliph.getChildByName("sp2");
				if(mc!=null){
					pages.flip.hfliph.removeChild(mc);
				}
				
				mc=pages.flip.hfliph.getChildByName("sp3");

				if(mc!=null){
					pages.flip.hfliph.removeChild(mc);
				}
				
				
				this.pages.flip.p2.page.pf.ph.removeChildAt(0);
				this.sp2 = this.pages.flip.p2.page.pf.ph.addChildAt(PageFactory.Create(p2),0);
				this.pages.flip.p2.page.pf.ph.y = -this.ph/2;
				
				
				this.pages.flip.p3.page.pf.ph.removeChildAt(0)
				this.sp3 = this.pages.flip.p3.page.pf.ph.addChildAt(PageFactory.Create(p3),0);
				this.pages.flip.p3.page.pf.ph.y = -this.ph/2;
				
			//}
			
		
			this.pages.p4.page.pf.ph.removeChildAt(0);
			this.pright = this.pages.p4.page.pf.ph.addChildAt(PageFactory.Create(p4),0);
			this.pages.p4.page.pf.ph.y = -this.ph/2;
			
			if(this.transparency) {
				
				
				this.pages.p5.page.pf.ph.removeChildAt(0)
				this.prightb = this.pages.p5.page.pf.ph.addChildAt(PageFactory.Create(p5),0);
				this.pages.p5.page.pf.ph.y = -ph/2;
				
			} else{
				this.pages.p5.visible = false;
			}
			
			if(this.lcover) {
				var lpl:int = transparency? p1-4: p1-2;
				var lpr:int = transparency? p4+4: p4+2;
				var limit:int = transparency? 0: -2;
				if(lpl>limit) {
					
					this.pages.pLL.page.pf.ph.removeChildAt(0)
					this.pages.pLL.page.pf.ph.addChildAt(PageFactory.Create(2),0);
					this.pages.pLL.page.pf.ph.y = -ph/2;
					this.pages.pLL.visible = true;
					
				} else{
					this.pages.pLL.visible = false;
				}
				
				if(lpr<(this.maxpage-limit)) {
					
					
					this.pages.pLR.page.pf.ph.removeChildAt(0)
					this.pages.pLR.page.pf.ph.addChildAt(PageFactory.Create(this.maxpage-1),0);
					this.pages.pLR.page.pf.ph.y = -this.ph/2;
					this.pages.pLR.visible = true;
					
				} else {
					this.pages.pLR.visible = false;
				}
			}
		}

		private function resetPages():void {
			this.setPages(this.page,0,0,this.page+1);
		}
		
		
		/**
		* start auto flip!
		*/
		private function autoflip() {
			
			//only when all conditions fits our needs...								
			if(!this.aflip && !this.flip && !this.flipOff && this.canflip) {	
				this.acnt = 0
				var pmh:Number = this.ph/2;
				//var aamp:Number = Math.random()*pmh-(this.ph/4);
				var Mx:Number= this.gflip? (this.gdir*this.pw)/2: ((this.pages.mouseX<0)? -this.pw/2: this.pw/2);

				var My:Number= this.pages.mouseY;
				
				if(My>0 && My>pmh) My = pmh;
				if(My<0 && My<-pmh) My = - pmh;
				
				this.oy = this.sy = My;
				this.ax = (this.pages.mouseX<0)? -pmh: pmh;
				
				//page turnig style randomizing
				this.ay = My*Math.random();				

				this.offs = -this.pw;
				var hit = 0;
				
				//已测;
				if(Mx<0 && this.page>0) {
					this.pages.flip.p3.x = 0;
					this.hflip = (this.hcover && this.gskip)? (this.page==this.maxpage || this.gtarget==0): this.checkCover(this.page,-1);
					if(!(this.preflip && this.hflip)) {
						if(this.gskip){
							
							this.setPages(this.gtarget,this.gtarget+1,this.page,this.page+1);
						}
						else{
							this.setPages(this.page-2,this.page-1,this.page,this.page+1);
						}
					}
					hit = -1;
				}
				//已测;
				if(Mx>0 && this.page<this.maxpage) {
					this.pages.flip.p3.x = this.pw;
					this.hflip = (this.hcover && this.gskip)? (this.page==0 || this.gtarget==this.maxpage): this.checkCover(this.page,1);
					if(!(this.preflip && this.hflip)) {
						if(this.gskip){
							this.setPages(this.page,this.gtarget,this.page+1,this.gtarget+1);
						}
						else{
							
							this.setPages(this.page,this.page+2,this.page+1,this.page+3);
						}
					}
					hit = 1;
				}
				if(this.hflip && this.preflip) {
					hit = 0;
					this.preflip = false;
					return false;
				}
				if(hit) {
					//anim.visible = false;
					this.flip = true;
					this.flipOff = false;
					this.ox = this.sx = hit*this.pw;
					
					this.pages.flip.mask=this.pages.masker;
					
					//autoflip takes 10 frames to be done!!!
					this.aadd = hit*(this.pw/(this.gflip? 5:10 ));			
					this.aflip = true;
					
					this.pages.flip.fmask.x = this.pw;
					if(this.preflip) {
						this.oy = this.sy = (this.pages.mouseY<0)? -(this.ph/2): (this.ph/2);
					}
					this.r0 = Math.sqrt((this.sy+this.ph/2)*(this.sy+this.ph/2)+this.pw*this.pw);
					this.r1 = Math.sqrt((this.ph/2-this.sy)*(this.ph/2-this.sy)+this.pw*this.pw);
					this.pageN = this.pages.flip.p2.page;
					this.pageO = this.pages.flip.p3;
					this.oef();
					return true;
				}
			} else{
				return false;
			}
		}
		
		/**
		* get x,y reference points depending of turning style: manual/auto
		*/
		private function getm() {
			if(this.aflip && !this.preflip) {
				Mx = this.ax;
				My = this.ay;
			} else {
				Mx = this.pages.mouseX;
				My = this.pages.mouseY;
			}
		}
		
		/**
		* 
		* @param	i
		* @param	skip
		*/
		private function gotoPage(i:int,skip:Boolean=false):void {
			i = this.getPN(i);	
			this.gskip = skip;	
			
			if(i<0){
				return;
			}
			var p:int = int(this.page/2);
			var d:int = int(i/2);
			if(p!=d && this.canflip && !this.gflip) {		//target!=current page
				if(p<d) {						//go forward
					this.gdir = 1;
					this.gpage = d-p-1;
				} else {						//go backward
					this.gdir = -1
					this.gpage = p-d-1;
				}
				this.gflip = true;
				if(this.gskip){ 
					this.gtarget = d*2;
					this.gpage = 0;
				}
				this.autoflip();
				this.startsnd(0);	//sound
			} else{
				this.gskip = false;
			}
		}
		
		/**
		* get the right page number
		* @param	i
		*/
		private function getPN(i:int):int {
			if(i==0) return 0;
			var find:Boolean = false;
			for(var j:uint=1;j<=this.maxpage;j++) {
				if(i==this.pageNumber[j]) {
					i=j;
					find = true;
					break;
				}
			}
			if(find) return i;
			return -1;
		}
		
		/**
		* 
		* @param	i
		* @return
		*/
		private function removePage(i:int):void {
			
			trace("remove page "+i);
			i = (Math.floor((i-1)/2)*2)+1;
			
			this.removedPages.push(this.pageNumber[i], this.pageNumber[i+1]);
			
			for(var j:uint=(i+2);j<=(maxpage+1);j++) {
				this.pageOrder[j-2]=this.pageOrder[j];
				this.pageCanTear[j-2]=this.pageCanTear[j];
				this.pageNumber[j-2]=this.pageNumber[j];
			}
			
			trace("removed pages "+i+","+(i+1));
			trace(this.removedPages.join(", "));
			this.maxpage -= 2;
			
		}
		
		//Sound starter
		private function startsnd(i):void {				
		}

		private function mouseDownHander(event:MouseEvent):void {
			if(this.flip && !this.aflip) {
				
				this.flipOK = false;	
				if(this.sx<0 && this.pages.mouseX>0){
					this.flipOK = true;
				}
				if(this.sx>0 && this.pages.mouseX<0){
					this.flipOK = true;
				}
				this.flipOff = true;
				this.flip = false;
				
			} else if((this.flipOff || this.aflip || !this.canflip) && !this.preflip) {
				
				trace("donothing");
				
			} else {
				
				var oox:Number = this.ox;
				var ooy:Number = this.oy;
				var osx:Number = this.sx;
				var osy:Number = this.sy;
				var hit:int = this.hittest();
				if(hit) {
					
					this.startsnd(1);
					this.flip = true;
					this.flipOff = false;
					this.tear = false;
					this.ox = this.sx = hit*this.pw;
					
					if(this.preflip) {
						
						this.aflip = this.preflip = false;
						this.ox = oox;
						this.oy = ooy;
						this.sx = osx;
						this.sy = osy;
						
					}
					
					this.pages.flip.mask=this.pages.masker;
					
					this.mpx = this.pages.mouseX;
					this.mpy = this.pages.mouseY;
					this.oef();
					
				}
			}
		}
		
		/**
		* 
		* @param	event
		* @return
		*/
		private function mouseUpHander(event:MouseEvent):void {
			if(this.flip && !this.tear) {
				if((Math.abs(pages.mouseX)>(pw-afa) && Math.abs(pages.mouseY)>(ph/2-afa) && Math.abs(pages.mouseX-mpx)<afa) || preflip) {
					this.flip = false;
					this.preflip = false;
					this.autoflip();
					this.startsnd(2);
				} else if(!this.preflip) {
					this.preflip = false;
					this.flipOK = false;	
					if(this.sx<0 && this.pages.mouseX>0){
						this.flipOK = true;
					}
					if(this.sx>0 && this.pages.mouseX<0){
						this.flipOK = true;
					}
					this.flipOff = true;
					this.flip = false;
					if(this.flipOK){
						this.startsnd(2);
					}
				}
			}
		}
		
		/**
		* 设置电子书数据来源;
		* @param	data
		*/
		public function set Data(data:Qxml){
		}
		public function prevPage():void {
			this.gotoPage(this.page-2);
		}
		public function nextPage():void {
			this.gotoPage(this.page+2);
		}
		
		public function center():void{
			this.moveTo(int(siteCommon.W/2),int(siteCommon.H/2));
		}
		public function moveTo(locationX:int,locationY:int):void{
			this.pages.x=locationX;
			this.pages.y=locationY;
			
			this.dispatchEvent(new FlipResize(FlipResize.RESIZE,this.pages));
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -