守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 784|回复: 2

[华丽特效] 鼠标滑动和点击粒子特效

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51757
    钢镚
    1422

    开源英雄守望者

    发表于 2015-7-15 15:01:04 | 显示全部楼层 |阅读模式




    1. package
    2. {
    3.     import flash.display.StageScaleMode;
    4.     import flash.events.Event;
    5.     import flash.events.MouseEvent;
    6.     import flash.display.BitmapData;
    7.     import flash.display.Bitmap;
    8.     import flash.geom.ColorTransform;
    9.     import flash.display.Shape;
    10.     import flash.geom.Point;
    11.     import flash.filters.BlurFilter;
    12.     import flash.display.Sprite;
    13.    
    14.     public class Main extends Sprite
    15.     {
    16.         
    17.         private const NUM_PARTICLES : int = 5000;
    18.         private const SPEED : Number = 1;
    19.         private const MAX_POWER : Number = 100;
    20.         
    21.         private var _canvas : BitmapData;  
    22.         private var _pixels : Vector.<Object>;
    23.         
    24.         private var _alphaTransform : ColorTransform;
    25.         private var _blurFilter : BlurFilter;
    26.         
    27.         private var _zeroPoint : Point;

    28.         public function Main()
    29.         {
    30.             stage.scaleMode = StageScaleMode.NO_SCALE;
    31.             
    32.             _canvas = new BitmapData( stage.stageWidth, stage.stageHeight, false, 0 );
    33.             addChild( new Bitmap( _canvas ) );
    34.             
    35.             _pixels = new Vector.<Object>( NUM_PARTICLES, true );
    36.             
    37.             for( var i : int = 0; i < NUM_PARTICLES; ++i )
    38.             {
    39.                 var pixel : Object = {};
    40.                 pixel.x = Math.random() * stage.stageWidth;
    41.                 pixel.y = Math.random() * stage.stageHeight;
    42.                 pixel.dx = 0;
    43.                 pixel.dy = 0;
    44.                 pixel.lastX = pixel.x;
    45.                 pixel.lastY = pixel.y;
    46.                 pixel.color = 0xFFFFFF;
    47.                 _pixels[i] = pixel;
    48.             }
    49.             
    50.             _alphaTransform = new ColorTransform( 1, 1, 1, .9 );
    51.             _blurFilter = new BlurFilter;
    52.             _zeroPoint = new Point;
    53.             
    54.             addEventListener( Event.ENTER_FRAME, onEnterFrame );
    55.             stage.addEventListener( MouseEvent.MOUSE_DOWN, onMouseDown );
    56.         }
    57.         
    58.         private function onEnterFrame( e : Event ) : void
    59.         {
    60.             _canvas.lock();
    61.             _canvas.applyFilter( _canvas, _canvas.rect, _zeroPoint, _blurFilter );
    62.             _canvas.colorTransform( _canvas.rect, _alphaTransform );
    63.             
    64.             var pixel : Object;
    65.             var angle : Number;
    66.             for( var i : int = 0; i < NUM_PARTICLES; ++i )
    67.             {
    68.                 pixel = _pixels[i];
    69.                
    70.                 pixel.lastX = pixel.x;
    71.                 pixel.lastY = pixel.y;
    72.                
    73.                 angle = Math.atan2( pixel.y - mouseY, pixel.x - mouseX );
    74.                 pixel.dx -= SPEED * Math.cos( angle );
    75.                 pixel.dy -= SPEED * Math.sin( angle );
    76.                
    77.                 pixel.x += pixel.dx;
    78.                 pixel.y += pixel.dy;
    79.                
    80.                 pixel.dx *= .95;
    81.                 pixel.dy *= .95;
    82.                
    83.                 drawLine( pixel.lastX, pixel.lastY, pixel.x, pixel.y, pixel.color );
    84.             }
    85.             
    86.             //canvas.applyFilter( canvas, canvas.rect, new Point, blurFilter );
    87.             
    88.             _canvas.unlock();
    89.         }
    90.         
    91.         private function onMouseDown( e : MouseEvent ) : void
    92.         {
    93.             var pixel : Object;
    94.             var randAngle : Number;
    95.             var randPower : Number;
    96.             
    97.             for( var i : int = 0; i < NUM_PARTICLES; ++i )
    98.             {
    99.                 pixel = _pixels[i];
    100.                 randAngle = Math.random() * ( Math.PI << 1 );
    101.                 randPower = Math.random() * MAX_POWER - ( MAX_POWER >> 1 );
    102.                 pixel.dx = randPower * Math.cos( randAngle );
    103.                 pixel.dy = randPower * Math.sin( randAngle );
    104.             }
    105.         }
    106.         
    107.         private function drawLine( startX : Number, startY : Number, endX : Number, endY : Number, color : Number ) : void
    108.         {
    109.             var dx : Number = endX - startX;
    110.             var dy : Number = endY - startY;
    111.             var a : Number;
    112.             var b : Number;
    113.             var tmp : Number;
    114.             var len : Number;
    115.             var i : int;
    116.             
    117.             if( getAbs( dx ) > getAbs( dy ) )
    118.             {
    119.                 a = dy / dx;
    120.                 b = startY;
    121.                
    122.                 if( startX > endX )
    123.                 {
    124.                     tmp = startX;
    125.                     startX = endX;
    126.                     endX = tmp;
    127.                     b = endY;
    128.                 }
    129.                
    130.                 len = endX - startX;
    131.                 for( i = 0; i < len; ++i )
    132.                 {
    133.                     _canvas.setPixel( i + startX, i * a + b, color );
    134.                 }
    135.             }
    136.             else
    137.             {
    138.                 a = dx / dy;
    139.                 b = startX;
    140.                
    141.                 if( startY > endY )
    142.                 {
    143.                     tmp = startY;
    144.                     startY = endY;
    145.                     endY = tmp;
    146.                     b = endX;
    147.                 }
    148.                
    149.                 len = endY - startY;
    150.                 for( i = 0; i < len; ++i )
    151.                 {
    152.                     _canvas.setPixel( i * a + b, i + startY, color );
    153.                 }
    154.             }
    155.         }
    156.         
    157.         private function getAbs( x : Number ) : Number
    158.         {
    159.             return x < 0 ? -x : x;
    160.         }
    161.     }
    162. }
    复制代码




    本文来自:http://wonderfl.net/c/eWKJ

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-24 01:34
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    0

    主题

    38

    帖子

    868

    积分

    上士

    Rank: 5Rank: 5

    威望
    20
    贡献
    0
    金币
    14
    钢镚
    0
    发表于 2017-10-26 01:07:05 | 显示全部楼层
    感谢分享!~
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    8

    帖子

    68

    积分

    列兵

    Rank: 2

    威望
    0
    贡献
    0
    金币
    23
    钢镚
    10
    发表于 2018-6-14 09:39:25 | 显示全部楼层
    不错看看
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2019-10-23 21:46 , Processed in 0.047981 second(s), 33 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表