Circuit miyaoka forked:0 favorite:0 lines:143 license : MIT License modified : 2009-03-16 18:13:55 /* fl.motionは使えないのかな */ package { import flash.display.Sprite; import flash.display.BitmapData; import flash.display.Bitmap; import flash.utils.Timer; import flash.events.TimerEvent; import flash.geom.ColorTransform; import flash.geom.Matrix; import flash.display.GradientType; import flash.events.MouseEvent; import flash.geom.Point; [SWF(width = "465", height = "465", backgroundColor = 0, frameRate = "60")] public class Circuit extends Sprite { private const W:Number = 465; private const H:Number = 465; public function Circuit() { // var bmd:BitmapData = new BitmapData(W,H,true,0x00FFFFFF) var container:Container = new Container(bmd); // var bmp:Bitmap = new Bitmap(bmd); // var timer:Timer = new Timer(100); timer.addEventListener(TimerEvent.TIMER, function ():void { bmd.colorTransform(bmd.rect, new ColorTransform(1, 1, 1, 0.9)); }); timer.start(); // stage.addEventListener(MouseEvent.MOUSE_DOWN,function ():void { timer.running ? timer.stop() : timer.start(); }); addChild(bmp); addChild(container); } } } import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Graphics; import flash.display.Sprite; import flash.filters.GlowFilter; import flash.geom.Point; import flash.geom.Rectangle; import flash.events.Event; import flash.geom.Matrix; import flash.display.GradientType; import fl.motion.BezierSegment; import flash.utils.Timer; import flash.events.TimerEvent; class Container extends Sprite { private var bmd:BitmapData; public function Container(bmd_:BitmapData):void { bmd = bmd_; var num:uint = 10; while (num--) add(null); } private function add(e:Event):void { var startPt:Point; if (e != null) { var lastCb:CircuitBezier = e.target as CircuitBezier; startPt = lastCb.lastPt; lastCb.removeEventListener("complete", add); lastCb = null; } else { startPt = new Point(Math.random() * bmd.width, Math.random() * bmd.height); } var cb:CircuitBezier; cb = new CircuitBezier(bmd, startPt, new Point(Math.random()* bmd.width, Math.random()*bmd.height), new Point(Math.random()* bmd.width, Math.random()*bmd.height), new Point(Math.random() * bmd.width, Math.random() * bmd.height) ); cb.addEventListener("complete", add); } } import flash.geom.ColorTransform; import flash.display.BlendMode; class CircuitBezier extends Sprite { private var bs:BezierSegment; private var timer:Timer = new Timer(0); private var step:uint = 50; private var i:uint = 0; private var bmd:BitmapData; public var lastPt:Point; public function CircuitBezier(bmd_:BitmapData, pt0:Point, pt1:Point, pt2:Point, pt3:Point):void { bmd = bmd_; bs = new BezierSegment(pt0, pt1, pt2, pt3); timer.addEventListener(TimerEvent.TIMER, update); timer.start(); filters = [ new GlowFilter(0xFFFFFF, 1, 50, 50) ]; } public function update(evt:TimerEvent):void { var pt0:Point = bs.getValue(i / step); var pt1:Point = bs.getValue((i +1) / step); // timer.removeEventListener(TimerEvent.TIMER, update); // if (i + 1 < step) { //-PI to PI var phi:Number = getPhi(pt0, bs.getValue((i +2) / step), pt1); //trace(phi * 180 / Math.PI ); //0 to 1 phi = Math.abs(phi) / Math.PI; timer = new Timer((1 - phi) * (50000 / step)); timer.start(); timer.addEventListener(TimerEvent.TIMER, update); } else { timer.stop(); timer = null; lastPt = pt1; var e:Event = new Event("complete"); dispatchEvent(e); return; } var g:Graphics = graphics; g.clear(); g.moveTo(pt0.x, pt0.y); g.lineStyle((1 - phi) * 100, 0xFFFFFF); g.lineTo(pt1.x, pt1.y); bmd.draw(this); // i++; } private function getPhi(pt1:Point, pt2:Point, pt0:Point):Number { pt1 = pt1.subtract(pt0); pt2 = pt2.subtract(pt0); return Math.atan2(pt1.x * pt2.y - pt1.y * pt2.x, pt1.x * pt2.x + pt1.y * pt2.y); } } Code Fullscreen Preview Fullscreen start stop dispatchEvent TimerEvent.TIMER removeEventListener target running addEventListener TimerEvent GlowFilter Math.atan2 Math.abs Math.PI ColorTransform Math.random Timer uint Number