每天学一点flash(84) 翻转


                    还记得flashmath 网站制作了一个例子,在里面有一个翻牌的效果。在那个时候,还没来得及时去看他们的原理,经过同事讲解之后,里面发现一些小细节的地方其实可以应用到目前很多游戏当中。但是我没有参照他的案例去写,反而写了一个比较原始,只能出效果的小实验。

 

                 这个实验,需要使用两张的位图,翻转的时候切换另外一张牌进行切换,至于什么时候切换是比较好?其实就是在 90 ,270 度这两个地方让人视角产生差异的地方进行切换是比较好的。

                   因为当rotationY =90的时候,是很难看到图片的全貌,所以这个时候进行你切换位图是很难让人看得出你在干啥,在flashmath案例当中使用了这个小技巧,真是很值得去学习。

 

                  下面做一个小实验:

 

 

var data:Array = [new bitmapDataA(0,0),new bitmapDataB(0,0)];//准备两张位图

//建立容器
var container:Sprite=new Sprite();
addChild(container);
container.x = 250;
container.y = 200;

//将位图移动到注册点位置
var bitmap:Bitmap=new Bitmap();
bitmap.bitmapData = data[0];

bitmap.x =  -  bitmap.width / 2;
bitmap.y =  -  bitmap.height / 2;

container.addChild(bitmap);
var key:Boolean = true;
var max:int = 85;


addEventListener(Event.ENTER_FRAME,Run);

var n:int = 5;
var isflip:Boolean = true;//是否翻转

function Run(event:Event):void
{
	n +=  5;

	container.rotationY = n % 360;

	if ( isflip &&  n > max )
	{

		isflip = false;
		if (key)
		{
			bitmap.bitmapData = data[1];
			key = false;
			max = 265;
		}
		else
		{
			bitmap.bitmapData = data[0];
			key = true;
			max = 85;
		}
	}

	if (! key && n > 265)
	{
		isflip = true;
	}

	if (n%360==0)
	{
		n = 5;
		isflip = true;
	}
}

 其中var data:Array = [new bitmapDataA(0,0),new bitmapDataB(0,0)];//准备两张位图

 

一张是背面 一张是正面

 

 

  正面和反面 两张位图。

 

下面再做一个小实验:

封装一个类,要求是点击牌就能够进行翻转,只是进行一个没有什么速度的效果。

 

package 
{
	import flash.display.Sprite;
	import flash.events.*;
	import flash.display.BitmapData;
	import flash.display.Bitmap;

	public class FilpEffect extends Sprite
	{
		private var data:Array = [];
		public var speed:int=5;
		private var isFilp:Boolean = false;
		private var bitmap:Bitmap;
		private var count:int;
		private var isComplete:Boolean=false;
		public function FilpEffect()
		{
			bitmap=new Bitmap();
			addChild(bitmap);
		}
        
		
		//填充两个面的位图
		public function fill(topBmpData:BitmapData,bottomBmpData:BitmapData):void
		{
			data.push(topBmpData,bottomBmpData);
			bitmap.bitmapData = data[0];
			bitmap.x =  -  bitmap.width / 2;
			bitmap.y =  -  bitmap.height / 2;
		}
         
		//播放特效 
		public function doEffect():void
		{
			if (! isFilp)
			{
				addEventListener(Event.ENTER_FRAME,onFilp);
				isFilp = true;
			}

		}

		private function onFilp(event:Event):void
		{
             count+=speed;
			 this.rotationY=count%360;
			
			 if( !isComplete && count>85)
			 {
				 bitmap.bitmapData = data[1];
				 this.scaleX=-1;
				 isComplete=true;
			 }
            
			if(count>=180)
			{
				removeEventListener(Event.ENTER_FRAME,onFilp);
				isFilp=false;
				isComplete=false
				count=0;
			}
		}
        
		//重设默认
		public function rest():void
		{        if(data[0])  
			bitmap.bitmapData = data[0];
                          this.scaleX=1;
		}
		
	}
}


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值