// forked from bkzen's forked from: test[朝わん] // forked from bkzen's test /** * 朝ワンのネタがないからちょっとずつ高速化を目指す。 * まず、bitmapData を lock した。 * 2回目にして設計を別モノに変えた。 * 元これ * http://wonderfl.net/code/7744487e2f3d3385ce38b2f63966e602b893fd8c */ // write as3 code here.. package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Graphics; import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.filters.BlurFilter; import flash.geom.Point; import net.hires.debug.Stats; [SWF(width="465", height="465", backgroundColor="0x000000", frameRate="30")] public class Asawon4 extends Sprite { private var color: uint = 0xFFFFFF; private const num: int = 500; private var bf: BlurFilter = new BlurFilter(2, 2); private var particle:Particle; private var bmd:BitmapData; private var bmp:Bitmap; private var canvas:Shape; private var point:Point = new Point(); private var ox: Number = 232; private var oy: Number = 232; public function Asawon4() { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e: Event = null): void { removeEventListener(Event.ADDED_TO_STAGE, init); // bmd = new BitmapData(465, 465, false, 0x0); bmp = new Bitmap(bmd); addChild(bmp); var prev: Particle = particle = new Particle(0, color); var p: Particle, i: int; while (++i <= num) { p = new Particle(i * Math.PI / 180, color); prev.next = p; prev = p; } canvas = new Shape(); addEventListener(Event.ENTER_FRAME, draw); stage.addEventListener(MouseEvent.CLICK, onClick); addChild(new Stats()); } private function draw(e:Event):void { var p: Particle = particle, g: Graphics = canvas.graphics, bx: Number, by: Number; bmd.lock(); g.clear(); while ((p = p.next) != null) { bx = p.x; by = p.y; p.x += p.vx; p.y += p.vy; p.vx += (Math.random() * 100 - Math.random() * 100) * 0.005; p.vy += (Math.random() * 100 - Math.random() * 100) * 0.005; g.lineStyle(1, p.color, 0.3); g.moveTo(ox + bx, oy + by); g.lineTo(ox + p.x, oy + p.y); g.moveTo(ox - bx, oy + by); g.lineTo(ox - p.x, oy + p.y); g.moveTo(ox + bx, oy - by); g.lineTo(ox + p.x, oy - p.y); g.moveTo(ox - bx, oy - by); g.lineTo(ox - p.x, oy - p.y); if (p.age++ > 200) p.reset(color); } bmd.draw(canvas); bmd.applyFilter(bmd, bmd.rect, point, bf); bmd.unlock(); color = (Math.random() * 10000 > 9950) ? randomColor() : color; } private function onClick(e:MouseEvent):void { color = randomColor(); } private function randomColor(): uint { var r: int = Math.random() * 128 + 128; var g: int = Math.random() * 128 + 128; var b: int = Math.random() * 128 + 128; return (r << 16) | (g << 8) | b; } } } class Particle { public var x: Number; public var y: Number; public var vx: Number; public var vy: Number; public var age: int; public var next: Particle; public var color: uint; function Particle(r: Number, color: uint) { vx = 2 * Math.cos(r); vy = 2 * Math.sin(r); x = 30 * Math.sin(r); y = 30 * Math.cos(r); age = Math.random() * 200; this.color = color; } public function reset(color: uint): void { var r: Number = Math.random() * Math.PI * 2; x = 30 * Math.sin(r); y = 30 * Math.cos(r); vx = vy = age = 0; this.color = color; } } [朝ワン]以前作った「test」を少しずつ高速に