Burster:
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(); } } }