AS3中技能或物品CD时间案例(转)

原文链接:http://www.longsihao.com/?p=56

下面我来介绍下,我们玩游戏的时候经常会看到有些技能释放后有一定的冷却时间的,就好像有一个阴影围着那个技能转圈圈一样,当圈圈转完之后技能又可以释放了,这个在AS3中怎么才能实现呢?
参考:http://bbs.9ria.com/thread-67903-1-1.html
其实很简单,主要是mask和graphics方法就可以实现,详细代码如下:

package
{
	import flash.display.Bitmap;
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.URLRequest;
 
	public class CDTimeSample extends Sprite
	{
		private var cdMask :CDMask;
		public function CDTimeSample()
		{
			init();
		}
		private function init():void
		{
			loadImg();
		}
		private function loadImg():void
		{
			var imgLoader :Loader = new Loader();
			var url:String = "http://www.longsihao.com/wp-content/uploads/2011/CDMaskSample/YP2.jpg";
			imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,imgLoaderHandler);
			imgLoader.load(new URLRequest(url));
		}
		private function imgLoaderHandler(e:Event):void
		{
			var imgBMP :Bitmap = (((e.target) as LoaderInfo).content as Bitmap);
			cdMask = new CDMask(imgBMP.bitmapData);
			addChild(cdMask);
		}
	}
}
CDMask
package
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.filters.ColorMatrixFilter;
	import flash.utils.getTimer;
	/**冷却时间遮罩类
	 * */
	public class CDMask extends Sprite
	{
		private var icon :Bitmap;					//图标
		private var cdMask :Sprite;					//冷却时间遮罩			
		private var currentAngle :Number;			//当前的角度
		private var speed :Number;					//CD时间速度
		private var radius :Number;					//遮罩半径
		private var background :Bitmap;				//背景图
		private var startTime :Number;				//开始时间
		private var totalTime :Number = 1000;		//CD冷却时间,1秒
		public function CDMask(BMD :BitmapData)
		{
			super();
			this.icon = new Bitmap(BMD);
			this.background = new Bitmap(BMD);
			this.background.filters = [new ColorMatrixFilter([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0])]; //灰色滤镜数组
			addChild(background);
			addChild(icon);
			this.addEventListener(MouseEvent.CLICK, startCDHandler);
		}
		private function startCDHandler(e:MouseEvent):void 
		{
			startTime = getTimer();				//开始获取时间
			cdMask = new Sprite();
			this.addChild(cdMask);
			icon.mask = cdMask;
			currentAngle = 0;
			speed = 1;
			radius = Math.sqrt(this.width/2 * this.width/2 + this.height/2 * this.height/2);		//遮罩半径,勾股定理,你们都懂的
			cdMask.x = this.width/2;
			cdMask.y = this.height/2;
 
			cdMask.graphics.beginFill(0);
			cdMask.graphics.lineTo(radius,0);
			cdMask.addEventListener(Event.ENTER_FRAME , efHandler);
			removeEventListener(MouseEvent.CLICK,startCDHandler);
		}
		private function efHandler(e:Event):void 
		{
			var postTime :Number = getTimer() - startTime;		//程序运行到这里的时间-开始的时间
			currentAngle += speed;
			if(postTime <= totalTime)
			{
				var currAngle:Number = 2 * Math.PI * ( postTime / totalTime );//根据经过时间算出弧度
				var toX :Number = radius * Math.cos(currAngle);
				var toY :Number = radius * Math.sin(currAngle);
				cdMask.graphics.lineTo(toX,toY);
			}else
			{
				if (this.contains(cdMask)) 
				{
					this.removeChild(cdMask);
					icon.mask = null;
					this.addEventListener(MouseEvent.CLICK, startCDHandler);
					removeEventListener(Event.ENTER_FRAME, efHandler);
				}
			}
		}
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值