// forked from nondelion's forked from: Snow // forked from Saqoosha's Snow package { /* * 少し変えてみた */ import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.geom.Point; import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextField; import flash.text.TextFormat; import flash.text.TextFieldAutoSize; import flash.utils.Dictionary; import net.hires.debug.Stats; [SWF(width=465, height=465, backgroundColor=0x0, frameRate=90)] public class TextTransition extends Sprite { private var bd:BitmapData; private var canvas:BitmapData; private var particles:Dictionary; private var bdp:Point; protected const RANGE:Number = 10000; protected const APPEAR_RAPGE:Number = 50; public function TextTransition() { canvas = new BitmapData(465, 465, true, 0xff000000); addChild( new Bitmap( canvas ) ); var tf:TextField = new TextField(); tf.defaultTextFormat = new TextFormat('Helvetica', 48, 0xffd400, true); tf.autoSize = TextFieldAutoSize.LEFT; tf.text = 'Wonderfl!!'; bd = new BitmapData(tf.width, tf.height, false, 0x0); bd.draw(tf); bdp = new Point( Math.floor( (465 - tf.width) / 2 ), Math.floor( (465 - tf.height) / 2 ) ); particles = new Dictionary(); for (var i:int=0; i < tf.width; i++) { for (var j:int=0; j < tf.height; j++) { var color:uint = bd.getPixel(i, j); if ( color != 0x0 ) { var p:Particle = new Particle(); p.x = i + bdp.x; p.y = j + bdp.y; p.cx = Math.random() * RANGE - RANGE/2; p.cy = Math.random() * RANGE - RANGE/2; p.vx = 6; p.vy = 6; p.color = color; particles[p] = true; } } } //this.addChild(new Stats()); addEventListener( Event.ENTER_FRAME, update ); stage.addEventListener( MouseEvent.CLICK, clickHandler ); } private function clickHandler(e:MouseEvent):void { canvas.lock(); canvas.fillRect(canvas.rect, 0x0); for (var key:* in particles) { var p:Particle = Particle(key); p.cx = Math.random() * RANGE - RANGE/2; p.cy = Math.random() * RANGE - RANGE/2; canvas.setPixel(p.cx, p.cy, p.color); } canvas.unlock(); } private function update(e:Event):void { canvas.lock(); canvas.fillRect(canvas.rect, 0x0); for (var key:* in particles) { var p:Particle = Particle(key); var r = Math.sqrt((p.x-p.cx)*(p.x-p.cx) + (p.y-p.cy)*(p.y-p.cy)); p.cx += (p.x - p.cx )/p.vx; p.cy += (p.y - p.cy )/p.vy; if ( Math.abs( p.cx - p.x ) <= 1 && Math.abs( p.cy - p.y) <= 1) { p.cx = p.x; p.cy = p.y; } var a:uint = r < APPEAR_RAPGE ? (1-r/APPEAR_RAPGE)*255 : 0; var c:uint = p.color + (a << 24); canvas.setPixel32(p.cx, p.cy, c); } canvas.unlock(); } } } class Particle { public var color:int; public var x:Number; public var y:Number; public var cx:Number; public var cy:Number; public var vx:Number; public var vy:Number; public function Particle() { color = 0xffffff; x = 0; y = 0; cx = 0; cy = 0; vx = 0; vy = 0; } } forked from: Snow