火花效果
煙火效果
與前一篇雪花效果不同的地方在於,
emitter Counter 這次是一次性的,也就是 Blast
renderer 採用 BitmapRenderer,
並監聽滑鼠事件,當 click 時產生火花。
註
這裡單純比較 BitmapRenderer 及 DisplayObjectRenderer
兩種 renderer FPS,結果居然是 DisplayObjectRenderer 略勝,讓我有些意外。
完整 code 如下:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package | |
{ | |
import flash.display.Sprite; | |
import flash.events.Event; | |
import flash.events.MouseEvent; | |
import flash.geom.Point; | |
import flash.geom.Rectangle; | |
import net.hires.debug.Stats; | |
import org.flintparticles.common.actions.Age; | |
import org.flintparticles.common.actions.Fade; | |
import org.flintparticles.common.counters.Blast; | |
import org.flintparticles.common.counters.Steady; | |
import org.flintparticles.common.displayObjects.Dot; | |
import org.flintparticles.common.displayObjects.Line; | |
import org.flintparticles.common.events.EmitterEvent; | |
import org.flintparticles.common.initializers.ColorInit; | |
import org.flintparticles.common.initializers.Lifetime; | |
import org.flintparticles.common.initializers.SharedImage; | |
import org.flintparticles.twoD.actions.Accelerate; | |
import org.flintparticles.twoD.actions.LinearDrag; | |
import org.flintparticles.twoD.actions.Move; | |
import org.flintparticles.twoD.actions.RotateToDirection; | |
import org.flintparticles.twoD.activities.FollowMouse; | |
import org.flintparticles.twoD.emitters.Emitter2D; | |
import org.flintparticles.twoD.initializers.Velocity; | |
import org.flintparticles.twoD.renderers.BitmapRenderer; | |
import org.flintparticles.twoD.zones.DiscZone; | |
public class Main extends Sprite | |
{ | |
private var emitter:Emitter2D; | |
public function Main():void | |
{ | |
if (stage) init(); | |
else addEventListener(Event.ADDED_TO_STAGE, init); | |
} | |
private function init(e:Event = null):void | |
{ | |
removeEventListener(Event.ADDED_TO_STAGE, init); | |
// entry point | |
// stats | |
addChild(new Stats); | |
// emiiter | |
emitter = new Emitter2D(); | |
// counter,一次性 | |
emitter.counter = new Blast(150); | |
// particle init, set up the particle’s position, velocity, image, color, lifetime. | |
// image | |
var imageClass:SharedImage = new SharedImage(new Line(8)); | |
emitter.addInitializer(imageClass); | |
// position | |
// velocity:放射狀 | |
var velocity:Velocity = new Velocity(new DiscZone(new Point(0,0), 100,0)); | |
emitter.addInitializer(velocity); | |
// color | |
emitter.addInitializer( new ColorInit( 0xFFFFFF00, 0xFFFF6600 ) ); | |
// life time | |
emitter.addInitializer( new Lifetime(.4, .8)); | |
// 生命週(秒) | |
emitter.addAction(new Age); | |
// 移動 | |
emitter.addAction(new Move); | |
// 淡出 | |
emitter.addAction(new Fade()); | |
// 加速度 | |
emitter.addAction(new Accelerate(0, 60)); | |
// follow direction. | |
emitter.addAction(new RotateToDirection()); | |
// slow it down when it's moving. | |
//emitter.addAction( new LinearDrag( 5 ) ); | |
// render | |
var renderer:BitmapRenderer = new BitmapRenderer(new Rectangle( 0, 0, 1000, 600 ) ); | |
addChild(renderer); | |
renderer.addEmitter(emitter); | |
// follow mouse | |
//emitter.addActivity(new FollowMouse(renderer)); | |
emitter.x = 500; | |
emitter.y = 300; | |
emitter.addEventListener( EmitterEvent.EMITTER_EMPTY, restart, false, 0, true ); | |
//emitter.start(); | |
stage.addEventListener( MouseEvent.CLICK, explode, false, 0, true ); | |
} | |
private function explode(e:MouseEvent):void | |
{ | |
emitter.x = mouseX; | |
emitter.y = mouseY; | |
emitter.start(); | |
} | |
private function restart(e:EmitterEvent):void | |
{ | |
Emitter2D(e.target).stop(); | |
} | |
} | |
} |
沒有留言:
張貼留言