守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 613|回复: 1

[华丽特效] 粒子特效

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

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

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

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

    开源英雄守望者

    发表于 2015-7-15 14:48:30 | 显示全部楼层 |阅读模式




    1. package
    2. {
    3.     import com.actionsnippet.qbox.QuickBox2D;
    4.     import com.actionsnippet.qbox.QuickObject;
    5.     import flash.display.Bitmap;
    6.     import flash.display.BitmapData;
    7.     import flash.display.BlendMode;
    8.     import flash.display.MovieClip;
    9.     import flash.display.Sprite;
    10.     import flash.events.Event;
    11.     import flash.filters.BlurFilter;
    12.     import flash.geom.Matrix;
    13.     import flash.geom.Point;
    14.     import frocessing.color.ColorHSV;
    15.     import idv.cjcat.stardust.common.clocks.SteadyClock;
    16.     import idv.cjcat.stardust.twoD.actions.waypoints.Waypoint;
    17.     import idv.cjcat.stardust.twoD.renderers.PixelRenderer;
    18.     import idv.cjcat.stardust.twoD.zones.CircleZone;
    19.     import net.hires.debug.Stats;
    20.    
    21.     /**
    22.      * Waypointのテスト
    23.      * @author paq89
    24.      */
    25.     [SWF(width=465, height=465, backgroundColor=0x000000, frameRate=60)]
    26.     public class Main extends Sprite
    27.     {
    28.         static private const ZERO_POINT:Point = new Point();
    29.         static private const BLUR:BlurFilter = new BlurFilter();
    30.         static private const WAYPOINT_COUNT:uint = 7;
    31.         private var _emitter:WaypointsEmitter;
    32.         private var _waypoints:/*Waypoint*/Array;
    33.         private var _circles:/*QuickObject*/Array;
    34.         private var _canvas:BitmapData;
    35.         private var _blurEffect:BitmapData;
    36.         private var _hsv:ColorHSV;
    37.         private var _matrix:Matrix;
    38.         private var _kirakira:BitmapData;
    39.         
    40.         public function Main():void
    41.         {
    42.             if (stage) init();
    43.             else addEventListener(Event.ADDED_TO_STAGE, init);
    44.         }
    45.         
    46.         private function init(e:Event = null):void
    47.         {
    48.             removeEventListener(Event.ADDED_TO_STAGE, init);
    49.             
    50.             // 変数を初期化
    51.             _hsv = new ColorHSV(0, 0.7);
    52.             _waypoints = []
    53.             _circles = [];
    54.             
    55.             // 背景
    56.             graphics.beginFill(0x000000); graphics.drawRect(0, 0, 465, 465);
    57.             
    58.             // パーティクルを表示するビットマップを作成
    59.             _canvas = new BitmapData(465, 465, true, 0x00000000);
    60.             _blurEffect = new BitmapData(465, 465, true, 0x00000000);
    61.             addChild(Bitmap(new Bitmap(_blurEffect)));
    62.             addChild(Bitmap(new Bitmap(_canvas)));
    63.             
    64.             // QuickBox2D
    65.             initQuickBox2D();
    66.             
    67.             // Stardust
    68.             initStardust();
    69.             
    70.             // キラキラエフェクト
    71.             _kirakira = new BitmapData(465 / 4, 465 / 4, false, 0x000000);
    72.             var bmp:Bitmap = new Bitmap(_kirakira, "never", true);
    73.             bmp.scaleX = bmp.scaleY = 4;
    74.             bmp.smoothing = true;
    75.             bmp.blendMode = BlendMode.ADD;
    76.             addChild(bmp);
    77.             _matrix = new Matrix(0.25, 0, 0, 0.25);
    78.             
    79.             // イベントリスナー
    80.             addEventListener(Event.ENTER_FRAME, loop);
    81.         }
    82.         
    83.         /*
    84.          * Stardust
    85.          */
    86.         private function initStardust():void
    87.         {
    88.             // パーティクルシステムの構築
    89.             _emitter = new WaypointsEmitter(new SteadyClock(0.7), _waypoints);
    90.             var renderer:PixelRenderer = new PixelRenderer(_canvas);
    91.             renderer.addEmitter(_emitter);
    92.         }
    93.         
    94.         /*
    95.          * QuickBox2D
    96.          */
    97.         private function initQuickBox2D():void
    98.         {
    99.             var mc:MovieClip = MovieClip(addChildAt(new MovieClip, 1));
    100.             mc.buttonMode = true;
    101.             var qbox:QuickBox2D = new QuickBox2D(mc, { gravityY:0 } );
    102.             qbox.setDefault( { lineColor:0xFFFFFF, fillAlpha:0 } );
    103.             qbox.addBox( { x:-1.5, y:7.75, width:3, height: 15.5, density:0} );
    104.             qbox.addBox( { x:17, y:7.75, width:3, height: 15.5, density:0 } );
    105.             qbox.addBox( { x:7.75, y:-1.5, width:15.5, height: 3, density:0 } );
    106.             qbox.addBox( { x:7.75, y:17, width:15.5, height: 3, density:0 } );
    107.             qbox.start();
    108.             qbox.mouseDrag();
    109.             
    110.             var hsv:ColorHSV = new ColorHSV(0, 0.7, 1);
    111.             for (var i:int = 0; i < WAYPOINT_COUNT; i++)
    112.             {
    113.                 hsv.h = i * (360 / WAYPOINT_COUNT);
    114.                 var x:int = (Math.random() * 465) >> 0;
    115.                 var y:int = (Math.random() * 465) >> 0;
    116.                 var circle:QuickObject = qbox.addCircle( { x:x / 30, y:y / 30, radius:10 / 30, restitution:0.5, lineColor:hsv.value } );
    117.                 _circles.push(circle);
    118.                 _waypoints.push(new Waypoint(circle.x*30, circle.y*30));
    119.             }
    120.         }
    121.         
    122.         /*
    123.          * エンターフレームイベント
    124.          */
    125.         private function loop(e:Event):void
    126.         {
    127.             // Waypointの位置を調整
    128.             for (var i:int = 0; i < WAYPOINT_COUNT; i++)
    129.             {
    130.                 _waypoints[i].x = _circles[i].x * 30;
    131.                 _waypoints[i].y = _circles[i].y * 30;
    132.             }
    133.             
    134.             CircleZone(_emitter.position.zone).x = _waypoints[0].x;
    135.             CircleZone(_emitter.position.zone).y = _waypoints[0].y;
    136.             CircleZone(_emitter.deathZone.zone).x = _waypoints[WAYPOINT_COUNT-1].x;
    137.             CircleZone(_emitter.deathZone.zone).y = _waypoints[WAYPOINT_COUNT-1].y;
    138.             
    139.             // キラキラエフェクト
    140.             _kirakira.fillRect(_kirakira.rect, 0x00000000);
    141.             _kirakira.draw(_canvas, _matrix);
    142.             
    143.             // 残像エフェクト
    144.             _blurEffect.draw(_canvas);
    145.             _blurEffect.applyFilter(_blurEffect, _canvas.rect, ZERO_POINT, BLUR);
    146.             _canvas.fillRect(_canvas.rect, 0x00000000);
    147.             
    148.             // パーティクルの色相を変更
    149.             _hsv.h++;
    150.             _emitter.color.color = _hsv.value32;
    151.             
    152.             // エミッターを更新
    153.             _emitter.step();
    154.         }
    155.         
    156.     }
    157.    
    158. }
    159. import idv.cjcat.stardust.common.clocks.Clock;
    160. import idv.cjcat.stardust.common.initializers.Color;
    161. import idv.cjcat.stardust.common.initializers.Mass;
    162. import idv.cjcat.stardust.common.math.UniformRandom;
    163. import idv.cjcat.stardust.twoD.actions.DeathZone;
    164. import idv.cjcat.stardust.twoD.actions.FollowWaypoints;
    165. import idv.cjcat.stardust.twoD.actions.Move;
    166. import idv.cjcat.stardust.twoD.actions.SpeedLimit;
    167. import idv.cjcat.stardust.twoD.emitters.Emitter2D;
    168. import idv.cjcat.stardust.twoD.initializers.Position;
    169. import idv.cjcat.stardust.twoD.zones.CircleZone;

    170. class WaypointsEmitter extends Emitter2D
    171. {
    172.     public var color:Color;
    173.     public var deathZone:DeathZone;
    174.     public var position:Position;
    175.    
    176.     public function WaypointsEmitter(clock:Clock, waypoints:Array)
    177.     {
    178.         super(clock);
    179.         
    180.         color = new Color();
    181.         position = new Position(new CircleZone(0, 0, 20));
    182.         deathZone = new DeathZone(new CircleZone(0, 0, 20));
    183.         
    184.         addInitializer(color);
    185.         addInitializer(position);
    186.         addInitializer(new Mass(new UniformRandom(4, 1)));
    187.         
    188.         addAction(deathZone);
    189.         addAction(new FollowWaypoints(waypoints, false, false));
    190.         addAction(new Move());
    191.         addAction(new SpeedLimit(3));
    192.     }
    193. }
    复制代码





    本文来自:http://wonderfl.net/c/6Z8A

    本帖子中包含更多资源

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

    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
    发表于 2019-2-24 02:32:10 | 显示全部楼层
    感谢分享!~
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

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

    本版积分规则

    
    关闭

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

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

    GMT+8, 2019-8-18 12:53 , Processed in 0.043937 second(s), 36 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

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