Forked from: clockmaker's ブシャ! diff:6 forked from: ブシャ! Ogoshi forked:1favorite:0lines:173license : MIT License modified : 2010-10-08 19:20:07 Embed Tweet // forked from clockmaker's ブシャ! // forked from soundkitchen's パァン! package { import flash.display.BlendMode; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; import flash.events.TimerEvent; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; import flash.filters.BitmapFilterQuality; import flash.filters.BlurFilter; import flash.geom.Point; import flash.utils.Timer; import com.flashdynamix.utils.SWFProfiler; import frocessing.color.ColorHSV; import org.libspark.betweenas3.BetweenAS3; import org.libspark.betweenas3.easing.*; import org.libspark.betweenas3.tweens.ITween; [SWF(width=465, height=465, frameRate=60, backgroundColor=0xCC0000)] public class Main extends Sprite { private static var P_ZERO:Point = new Point(); private static var F_BLUR:BlurFilter = new BlurFilter(4, 4, BitmapFilterQuality.LOW); private var _txt:TextField; private var _hsv:ColorHSV; private var _film:BitmapData; private var _timer:Timer; private var _activeParticles:Vector.<Particle>; private var _inactiveParticles:Vector.<Particle>; public function Main() { graphics.beginFill(0) graphics.drawRect(0,0,stage.stageWidth, stage.stageHeight) addEventListener(Event.ADDED_TO_STAGE, initialize); } private function initialize(evt:Event):void { removeEventListener(Event.ADDED_TO_STAGE, initialize); SWFProfiler.init(this); var i:uint, fmt:TextFormat, bm:Bitmap; _activeParticles = new Vector.<Particle>(); _inactiveParticles = new Vector.<Particle>(); for (i=0; i<10000; i++) { _inactiveParticles.push(new Particle()); } _hsv = new ColorHSV(0, 2, 1, 1); fmt = new TextFormat(); fmt.font = "Verdana"; fmt.bold = true; fmt.size = 20; _txt = new TextField(); _txt.defaultTextFormat = fmt; _txt.autoSize = TextFieldAutoSize.LEFT; _txt.text = "HENRY WARREN IS MY FRIEND"; _film = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0); bm = new Bitmap(_film); //bm.blendMode = BlendMode.ADD; addChild(bm); _timer = new Timer(0); _timer.addEventListener(TimerEvent.TIMER, timerHandler); _timer.start(); addEventListener(Event.ENTER_FRAME, enterFrameHandler); } private function enterFrameHandler(evt:Event):void { var i:uint, p:Particle; _hsv.h = (Math.random() - 0.5) * 40; _film.lock(); _film.applyFilter(_film, _film.rect, P_ZERO, F_BLUR); for (i=0; i<_activeParticles.length; i++) { p = _activeParticles[i]; p.x += p.vx; p.y += p.vy; p.life--; _film.setPixel32(p.x, p.y, p.color); if (!p.life) { _activeParticles.splice(i, 1); _inactiveParticles.push(p); i--; } } _film.unlock(); } private function timerHandler(evt:TimerEvent):void { _timer.delay = (60 + Math.random() * 950) >> 0; var sp:Sprite, bm:Bitmap, bmd:BitmapData, t:ITween; //_hsv.h = ++_hsv.h % 360; _txt.textColor = _hsv.value; bmd = new BitmapData(_txt.width, _txt.height, true, 0); bmd.draw(_txt); bm = new Bitmap(bmd); bm.smoothing = true; bm.x -= bm.width >> 1; bm.y -= bm.height >> 1; sp = new Sprite(); sp.addChild(bm); sp.x = (Math.random() * stage.stageWidth) >> 0; sp.y = (Math.random() * stage.stageHeight) >> 0; sp.scaleX = 0; sp.scaleY = 0; sp.rotation = (Math.random() * 360) >> 0; //sp.blendMode = BlendMode.ADD; addChild(sp); t = BetweenAS3.serial( BetweenAS3.to(sp, { 'scaleX': 1, 'scaleY': 1, 'rotation': 0 }, 2, Expo.easeIn), BetweenAS3.removeFromParent(sp) ); t.onComplete = tweenComplete; t.onCompleteParams = [sp, bm, bmd]; t.play(); } private function tweenComplete(sp:Sprite, bm:Bitmap, bmd:BitmapData):void { var i:uint, j:uint, c:uint, cx:Number, cy:Number, angle:Number, strength:Number, p:Particle; cx = sp.x + bm.x; cy = sp.y + bm.y; for (i=0; i<bmd.width; i++) { for (j=0; j<bmd.height; j++) { c = bmd.getPixel32(i, j); if (!c) continue; p = _inactiveParticles.length ? _inactiveParticles.shift() : new Particle(); angle = Math.random() * Math.PI * 2; strength = Math.random() * 20; p.vx = Math.cos(angle) * strength; p.vy = Math.sin(angle) * strength; p.x = cx + i; p.y = cy + j; p.color = c; p.life = 200; _activeParticles.push(p); } } bmd.dispose(); var flash :Sprite = new Sprite() flash.graphics.beginFill(0xFFFFFF) flash.graphics.drawRect(0,0,stage.stageWidth, stage.stageHeight) flash.blendMode = BlendMode.OVERLAY flash.alpha = 0 addChild(flash) BetweenAS3.serial( BetweenAS3.tween(flash, {alpha:0}, {alpha:1},0.3, Sine.easeIn), BetweenAS3.removeFromParent(flash) ).play() } } } class Particle { public var vx:Number; public var vy:Number; public var x:Number; public var y:Number; public var color:uint; public var life:uint; } Code Fullscreen Preview Fullscreen BetweenAS3.removeFromParent TimerEvent.ADDED_TO_STAGE BetweenAS3.serial Sine.easeIn onCompleteParams Expo.easeIn ColorHSV onComplete delay play blendMode bold color rotation shift value TimerEvent.ENTER_FRAME BlurFilter TextFormat TimerEvent sort new page view favorite forked pv181 forked from: forked from: ブシャ!.. halfmile forked:0 favorite:1lines:173 (diff:1)