前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个flash鼠标特效

一个flash鼠标特效

作者头像
meteoric
发布2018-11-16 15:59:50
8660
发布2018-11-16 15:59:50
举报
文章被收录于专栏:游戏杂谈游戏杂谈

有点像“水果忍者”划过屏幕时的动画,在每次按住鼠标左键不放然后拖动鼠标并释放,会出现动画。动画我参考别人的代码,然后在显示特效的时候使用了不同的颜色。

代码并不复杂,主要用到了GlowFilter,然后让线条的粗细大小从指定的一个值,慢慢减小..

MouseEffectDemo.as

代码语言:javascript
复制
1: package  

       2: {

       3:     import flash.display.Sprite;

       4:     import flash.events.Event;

       5:     import flash.events.MouseEvent;

       6:     import flash.filters.GlowFilter;

       7:     /**

       8:      * ...

       9:      * @author Meteoric_cry

      10:      */

      11:     public class MouseEffectDemo extends Sprite

      12:     {

      13:         private var _scene:Sprite;

      14:         

      15:         private var _startX:int;

      16:         private var _startY:int;

      17:         

      18:         private var _isDown:Boolean;

      19:         

      20:         private static const MIN_POINT_DISTANCE:int = 20;

      21:         

      22:         public function MouseEffectDemo() 

      23:         {

      24:             initView();

      25:         }

      26:         

      27:         private function initView():void

      28:         {

      29:             _scene = new Sprite();

      30:             

      31:             addChild(_scene);

      32:             

      33:             _scene.filters = [getGlowFilter(0x00CCFF)];

      34:             

      35:             stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDownHandler);

      36:             stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUpHandler);

      37:         }

      38:         

      39:         private function listenerEnterFrameHandler():void

      40:         {

      41:             unlistenerEnterFrameHandler();

      42:             

      43:             stage.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);

      44:         }

      45:         

      46:         private function unlistenerEnterFrameHandler():void

      47:         {

      48:             stage.removeEventListener(Event.ENTER_FRAME, onEnterFrameHandler);

      49:         }

      50:         

      51:         private function onEnterFrameHandler(e:Event):void 

      52:         {

      53:             //LineArr的长度可能会动态变化,详情参见它的update方法

      54:             for each (var line:Line in Line.lineArr)

      55:             {

      56:                 line.update();

      57:             }

      58:             

      59:             update();            

      60:         }

      61:         

      62:         private function update():void

      63:         {

      64:             if (_isDown == false)

      65:             {

      66:                 if (Line.lineArr.length === 0)

      67:                 {

      68:                     unlistenerEnterFrameHandler();

      69:                 }

      70:                 

      71:                 return ;

      72:             }

      73:             

      74:             var endX:int = mouseX;

      75:             var endY:int = mouseY;

      76:             

      77:             if (Math.abs(_startX - endX) < MIN_POINT_DISTANCE || Math.abs(_startY - endY) < MIN_POINT_DISTANCE)

      78:             {

      79:                 return ;

      80:             }

      81:             

      82:             var line:Line = new Line(_startX, _startY, endX, endY);

      83:             

      84:             _scene.addChild(line);

      85:             

      86:             _startX = endX;

      87:             _startY = endY;            

      88:         }

      89:         

      90:         private function onMouseUpHandler(e:MouseEvent):void 

      91:         {

      92:             _isDown = false;

      93:         }

      94:         

      95:         private function onMouseDownHandler(e:MouseEvent):void 

      96:         {

      97:             _isDown = true;

      98:             

      99:             changeColorHandler();

     100:             

     101:             _startX = mouseX;

     102:             _startY = mouseY;

     103:             

     104:             listenerEnterFrameHandler();

     105:         }

     106:         

     107:         private function getGlowFilter(color:Number):GlowFilter

     108:         {

     109:             return new GlowFilter(color, 1, 10, 10, 2, 1, false, false)

     110:         }

     111:         

     112:         private function changeColorHandler():void

     113:         {

     114:             var colorArr:Array = [0x00CCFF, 0xF5001D, 0xBC0093, 0x00CE00, 0xFF7400];

     115:             var color:Number = colorArr[Math.floor(Math.random() * colorArr.length)];

     116:             

     117:             _scene.filters = [getGlowFilter(color)];

     118:         }

     119:         

     120:     }

     121:  

     122: }

Line.as

代码语言:javascript
复制
1: package  

       2: {

       3:     import flash.display.Sprite;

       4:     

       5:     /**

       6:      * ...

       7:      * @author Meteoric_cry

       8:      */

       9:     public class Line extends Sprite

      10:     {

      11:         static public var lineArr:Array = [];

      12:         

      13:         public var startX:int;

      14:         public var startY:int;

      15:         public var endX:int;

      16:         public var endY:int;

      17:         public var lineSize:int;

      18:         

      19:         public function Line(x0:int, y0:int, x1:int, y1:int, size:int=8) 

      20:         {

      21:             lineArr.push(this);

      22:             

      23:             startX = x0;

      24:             startY = y0;

      25:             endX = x1;

      26:             endY = y1;

      27:             lineSize = size;

      28:             

      29:             draw();

      30:         }

      31:         

      32:         private function draw():void

      33:         {

      34:             graphics.clear();

      35:             graphics.lineStyle(lineSize, 0xFFFFFF);

      36:             graphics.moveTo(startX, startY);

      37:             graphics.lineTo(endX, endY);

      38:         }

      39:         

      40:         public function update():void

      41:         {

      42:             draw();

      43:             

      44:             lineSize -= 1;

      45:             

      46:             if (lineSize < 1)

      47:             {

      48:                 clear();

      49:             }

      50:         }

      51:         

      52:         private function clear():void

      53:         {

      54:             graphics.clear();

      55:             

      56:             for (var i:int = 0, len:int = lineArr.length; i < len; i++)

      57:             {

      58:                 var line:Line = lineArr[i] as Line;

      59:                 

      60:                 if (line == this)

      61:                 {

      62:                     lineArr.splice(i, 1);

      63:                     parent.removeChild(this);

      64:                     

      65:                     break;

      66:                 }

      67:             }

      68:         }

      69:         

      70:         

      71:     }

      72:  

      73: }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012-08-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档