zoukankan      html  css  js  c++  java
  • AS星尘(stardust)粒子系统 学习 3

    Burster:

    Allows users to create particles and fully customize their properties.
    允许总户创建粒子,并完全可以自定义其属性。

    If you don't want to create random particles as Stardust does, you can use bursters to create particles with properties of exact given values.

    如果你不想像星尘那样去创建随机粒子,你可以使用bursters来创建拥有确定值的粒子。

    定义的方法一半是抽象方法,需要子类去实现,一半是final方法,不能被子类重写。

    例子:

    发射器:PointUniburstEmitter.as

    package {
        import idv.cjcat.stardust.common.actions.Age;
        import idv.cjcat.stardust.common.actions.DeathLife;
        import idv.cjcat.stardust.common.actions.ScaleCurve;
        import idv.cjcat.stardust.common.clocks.Clock;
        import idv.cjcat.stardust.common.initializers.Life;
        import idv.cjcat.stardust.twoD.actions.Move;
        import idv.cjcat.stardust.twoD.actions.Oriented;
        import idv.cjcat.stardust.twoD.actions.RandomDrift;
        import idv.cjcat.stardust.twoD.actions.Snapshot;
        import idv.cjcat.stardust.twoD.emitters.Emitter2D;
        
        public class PointUniburstEmitter extends Emitter2D {
            
            public function PointUniburstEmitter(clock:Clock) {
                super(clock);
                
                //actions
                addAction(new Age());
                addAction(new DeathLife());
                addAction(new Oriented());
                addAction(new ScaleCurve(0, 90));
                addAction(new RandomDrift(0.2,0.25));
                addAction(new Move(0.5));
                addAction(new Snapshot());
            }
        }
    }

    ArrowBurster:

    package {
        import idv.cjcat.stardust.common.initializers.Alpha;
        import idv.cjcat.stardust.common.initializers.Color;
        import idv.cjcat.stardust.common.initializers.Life;
        import idv.cjcat.stardust.common.initializers.Mass;
        import idv.cjcat.stardust.common.math.UniformRandom;
        import idv.cjcat.stardust.twoD.bursters.PointUniburster;
        import idv.cjcat.stardust.twoD.initializers.DisplayObjectClass;
        
        public class ArrowBurster extends PointUniburster {
            
            public function ArrowBurster() {
                count = 10;
                x = 320;
                y = 240;
                speed = 5;
                
                addInitializer(new DisplayObjectClass(Ball));
                addInitializer(new Life(new UniformRandom(60, 0)));
                addInitializer(new Alpha(new UniformRandom()));
                addInitializer(new Color(0xff00ff));
                addInitializer(new Mass(new UniformRandom()));
            }
        }
    }

    主程序:

    Test3.as

    package
    {
        import flash.display.Sprite;
        import flash.display.StageScaleMode;
        import flash.events.Event;
        import flash.events.TimerEvent;
        import flash.geom.Rectangle;
        import flash.utils.Timer;
        
        import idv.cjcat.stardust.common.clocks.ImpulseClock;
        import idv.cjcat.stardust.common.clocks.SteadyClock;
        import idv.cjcat.stardust.common.emitters.Emitter;
        import idv.cjcat.stardust.twoD.display.AddChildMode;
        import idv.cjcat.stardust.twoD.handlers.DisplayObjectHandler;
        
        import net.hires.debug.Stats;
    
        public class Test3 extends Sprite
        {
            protected var stats:Stats;
            protected var container:Sprite;
            protected var emitter:Emitter;
            private var burster:ArrowBurster;
            
            public function Test3()
            {
                stage.scaleMode = StageScaleMode.NO_SCALE;
                root.scrollRect = new Rectangle(0, 0, 640, 480);
                this.stage.frameRate = 50;
                stats = new Stats();
                addChild(stats);
                
                this.container = new Sprite();
                addChild(container);
                
                burster = new ArrowBurster();
                //创建时钟,创建发射器。发射器内部add Action。
                emitter = new PointUniburstEmitter(new SteadyClock());
                emitter.particleHandler = new DisplayObjectHandler(container,AddChildMode.BOTTOM);
                
                this.addEventListener(Event.ENTER_FRAME,onEnterFrame);
                var timer:Timer = new Timer(100);
                timer.addEventListener(TimerEvent.TIMER, burst);
                timer.start();
            }
            
            private function burst(e:TimerEvent):void {
                burster.angleOffset += 4;
                burster.burst(emitter);
            }
            
            private function onEnterFrame(e:Event):void
            {
                emitter.step();
            }
        }
    }
  • 相关阅读:
    树形DP 统计树中长度为K的路径数量——Distance in Tree
    Linux下使用Vi是方向键变乱码 退格键不能使用的解决方法
    wikioi 1029 中序遍历总数
    struts2前端页面读取Clob/BLOB
    hdu 1712 ACboy needs your help
    HDU 2489 Minimal Ratio Tree (dfs+Prim最小生成树)
    用XMLRPC开服务进行server/client通信
    HDU 1171 Big Event in HDU
    VS2012调试执行,网页打不开
    解决安装OpenShift Client Tools时提示的dl/import (LoadError)问题
  • 原文地址:https://www.cnblogs.com/holycy/p/2241532.html
Copyright © 2011-2022 走看看