Forked from: knd's 自己計測するパーティクル diff:72 forked from: 自己計測するパーティクル bkzen forked:0favorite:2lines:85license : MIT License modified : 2010-03-11 12:17:36 Embed Tweet package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; import flash.geom.Point; import net.hires.debug.Stats; [SWF (backgroundColor = "0x0", frameRate = "30", width = "465", height = "465")] public class FlashTest extends Sprite { private const numParticles: int = 300; private var _particles: Array; private var stats: Stats; private var bmd: BitmapData; private var point: Point; public function FlashTest() { // write as3 code here.. if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e: Event = null): void { removeEventListener(Event.ADDED_TO_STAGE, init); // _particles = []; for (var i:int = 0; i < numParticles; i++) { var p:Particle = new Particle(); _particles.push(p); //addChild(p); } addChild(stats = new Stats()); addChild(new Bitmap(bmd = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0), "auto", true)); point = new Point(); addEventListener(Event.ENTER_FRAME, loop); } private function loop(e:Event):void { bmd.lock(); var b: BitmapData = new BitmapData(stats.width, stats.height, false, 0); var r: Number, i: int; b.draw(stats); bmd.fillRect(bmd.rect, 0); for (i = 0; i < numParticles; i++) { var p: Particle = _particles[i]; p._theta += 0.01; r = p._theta * 10; r *= r; p.x = p._x0 + r * Math.cos(p._theta + p._theta0); p.y = p._y0 + r * Math.sin(p._theta + p._theta0); if (p.x > 465 || p.x < -60 || p.y > 465 || p.y < -80) { p.init(); _particles.splice(i, 1); _particles.unshift(p); } else { point.x = p.x, point.y = p.y; bmd.copyPixels(b, b.rect, point); } } b.dispose(); bmd.unlock(); } } } class Particle { public var x: Number = 0, y: Number = 0; public var _x0: Number = 0, _y0: Number = 0; public var _theta0: Number = 0, _theta: Number = 0; public function Particle() { super(); _x0 =200; _y0 =180; _theta0 = 2 * Math.PI * Math.random(); _theta = 2.5 * Math.random(); } public function init():void { x = _x0; y = _y0; _theta = 0; _theta0 = 2 * Math.PI * Math.random(); } } Code Fullscreen Preview Fullscreen djankey clockmaker : BitmapDataにdrawする形にリファクタリング Stats Event.ADDED_TO_STAGE unshift stage addEventListener splice removeEventListener height width addChild Math.PI Point Event push Math.cos Event.ENTER_FRAME Math.sin Math.random Array Sprite