CD 技能特效

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 = "1.png";
            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);
        }
    }
}

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;
    import flash.geom.Matrix;
    import flash.sampler.getSize;

    /**
     *冷却时间遮罩类
     **/
    public class CDMask extends Sprite
    {
        private var icon :Shape;                    //图标
        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 = 500;        //CD冷却时间,1秒

        private function drawBitmap(bgshape:Shape,bmp:BitmapData,_alpha:Number = 1.0):void
        {
            bgshape.graphics.beginBitmapFill(bmp);
            bgshape.graphics.drawRect(0, 0, bmp.width, bmp.height);
            bgshape.graphics.endFill();
            bgshape.alpha = _alpha;
        }

        public function CDMask(BMD :BitmapData)
        {
            super();
            var bg:Shape = new Shape();
            drawBitmap(bg,BMD,0.2);
            addChild(bg);

            this.icon =    new Shape();    // new Bitmap(BMD);
            drawBitmap(icon,BMD,1.0);
            addChild(icon);
            /*
            var background:Bitmap = 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])]; //灰色滤镜数组
            background.alpha = 0.2;
            addChild(background);
            trace(getSize(bgshape),getSize(background));
            */

            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);
                }
            }
        }
    }
}

var _s:CDTimeSample = new CDTimeSample();
addChild(_s);

时间: 2024-11-06 20:49:05

CD 技能特效的相关文章

Ngui _CD技能特效

using UnityEngine;using System.Collections; public class Skill : MonoBehaviour { public float coldTime=2;//技能冷却时间 private UISprite sprite; bool isColding=false;//标志位,判断技能是否在冷却. // Use this for initialization void Start () { sprite = transform.Find ("

NGUI技能冷却CD特效制作

其实蛮简单的今天紫龙感觉萌萌哒就详详细细地记录一下把: 首先在制作一个sprite命名为skill加一个背景图片,然后再建立一个sprite,选择一个可以挡住skill的背景的图片,然后选择Filled属性(如下图).然后在Sprite下面建立一个Label用来表示技能的按键快捷键,本例用的是R键...如下图                  因为sprite的图片挡住了skill的图片,所以给sprite的Alpha值调整到半透明,调整在color里面的属性如图(图的左边已经看到了效果):在c

NGUI实现技能CD效果

在NGUI中使用Sprite的遮罩效果可以很轻松的实现技能CD效果. 具体实现步骤: ①新建一个技能图标的Sprite 如图中的Skill001,再在该技能Sprite上添加一个Sprite做遮罩, Atlas中选一张纯灰色背景的图片,如图中的Shade_Sprite. ②在该遮罩Sprite中有三个属性用来控制遮罩的效果. Type:Filled Fill Dir:Radial360 Fill Amount:0 滑动Fill Amount,就可以看到效果了 ③给技能游戏对象绑定一个快捷键或按钮

技能的释放与CD

1 using UnityEngine; 2 using System.Collections; 3 using UnityEngine.UI; 4 5 public class skill : MonoBehaviour 6 { 7 8 public static skill _instance;//设为静态变量 9 private Image fillColding; 10 public float coldTimer = 1; 11 private float time = 0; 12 p

NGUI技能CD效果制作(sprite的type:filled)

一,我们先添加一个sprite,改名为skill.给当前skill添加图片,然后再sprite下添加一个sprite和一个label,结果如下 二现在我们来设置skill下的sprite,给他设置一个纯色空白图片,然后将他的type选择为filled和coloer tint 选择为黑色,然后设置为半透明, coloer tint 点击打开下选择颜色框 箭头区域为设置半透明重点 最终结果显示设置为: 现在我们手动修改fill amount,可以看到黑色遮罩层360度减少,效果如下: 三,我们添加一

游戏开发——战斗系统之技能设计

现在在做的项目大致分为两块:战斗系统和除战斗系统之外的(简称外围系统),而我一直在做的是外围系统的开发,至少在6月份返校毕业答辩之前没有动过战斗系统.答辩回来之后很长一段时间内也是在做外围系统的bug修复,可是由于种种原因项目赶不上所谓的进度了,上周五主管问我和另外一个也主要负责外围系统开发的同事谁更忙,我一句我没啥事干,结果主管说战斗系统的主动技能让我来做.这周一开会负责人一纸任务安排扔下来,上面写着XX同事这周完成主动技能的开发及相关系统的bug修复,还说没完成任务就XXX,此处省略XX字.

游戏技能设计 转

技能设计目录1. 技能定义 12. 技能对游戏的贡献 13. 技能设计中的内在元素 13.1. 技能使用前提条件 13.1.1. 自身条件 13.1.2. 目标条件 23.1.3. 场景条件 23.2. 触发方式 23.2.1. 主动技能: 23.2.2. 被动技能: 23.2.3. 开关式主动技能: 23.2.4. 开关式被动技能: 23.3. 技能消费 33.3.1. Mp或者类似mp的参数 33.3.2. Buff 33.3.3. 道具 33.3.4. 野外的npc 33.4. 技能威力/

游戏技能设计参考

技能设计 目录 1. 技能定义 1 2. 技能对游戏的贡献 1 3. 技能设计中的内在元素 1 3.1. 技能使用前提条件 1 3.1.1. 自身条件 1 3.1.2. 目标条件 2 3.1.3. 场景条件 2 3.2. 触发方式 2 3.2.1. 主动技能: 2 3.2.2. 被动技能: 2 3.2.3. 开关式主动技能: 2 3.2.4. 开关式被动技能: 2 3.3. 技能消费 3 3.3.1. Mp或者类似mp的参数 3 3.3.2. Buff 3 3.3.3. 道具 3 3.3.4.

搬运工的日常--回合制战斗的技能实现

回合制战斗的技能实现 我们游戏的逻辑部分是放在服务器端进行处理的,实际上前端所处理的仅仅是一个表现效果,可以说只是一个播放器.但实际上完全可以在本地加上一个逻辑模块,将全部的逻辑放在本地处理. 一般来说,逻辑模块处理技能之后,display模块会得到如下数据 1.技能id 2.主动角色:战场中的哪个角色释放了技能 (实际上,这个拥有多个角色,实现出类似于合体技的效果,但是我们的项目没有这类的需求,故只处理了一个) 3.被动角色组:战场中哪些角色被主动角色发动的技能施加了影响 (是伤害?还是治疗?