forked from: 爆発するワンコ(チェックメイト)

by ohisama forked from 爆発するワンコ(チェックメイト) (diff: 79)
[SWF(width=465, height=465, frameRate=30, backgroundColor=0x0f0f0f)]
♥0 | Line 150 | Modified 2013-02-02 14:44:42 | MIT License | (replaced)
play

ActionScript3 source code

/**
 * Copyright ohisama ( http://wonderfl.net/user/ohisama )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/8H4w
 */

// forked from clockmaker's 爆発するワンコ(チェックメイト)
// forked from soundkitchen's パァン! (soundkichenさんのcodeをfolk)
package
{
    import flash.display.*;
    import flash.events.*;
    import flash.net.*;
    import flash.system.*;
    import flash.text.*;
    import flash.filters.*;
    import flash.geom.*;
    import flash.utils.*;
    import jp.progression.commands.lists.SerialList;
    import jp.progression.commands.net.LoadSWF;
    import org.libspark.betweenas3.BetweenAS3;
    import org.libspark.betweenas3.easing.*;
    import org.libspark.betweenas3.tweens.ITween;
    //[SWF(width=465, height=465, frameRate=30, backgroundColor=0x0f0f0f)]
    public class Amateur extends Sprite
    {
        public static var GRAPHICS_URL : String = "http://swf.wonderfl.net/static/assets/checkmate05/wancoAmateur.swf"; 
        public var stayMotion : MovieClip;
        //public var jumpMotion : MovieClip;
        //public var highJumpMotion : MovieClip;
        //public var walkMotion : MovieClip;
        //public var runMotion : MovieClip;
        //public var squatMotion : MovieClip;
        //public var questionMotion : MovieClip;
        //public var exclamationMotion : MovieClip;
        //public var heartMotion : MovieClip;
        //public var poutMotion : MovieClip;
        //public var starMotion : MovieClip;
        //public var singMotion : MovieClip;
        //public var sleepMotion : MovieClip;
        //public var wakeMotion : MovieClip;
        private static var P_ZERO : Point = new Point();
        private static var F_BLUR : BlurFilter = new BlurFilter(4, 4, BitmapFilterQuality.LOW);
        private var _film : BitmapData;
        private var _timer : Timer;
        private var _activeParticles : Vector.<Particle>;
        private var _inactiveParticles : Vector.<Particle>;
        public function Amateur()
        {
            Wonderfl.capture_delay(4);
            new SerialList(null, 
                new LoadSWF(new URLRequest(GRAPHICS_URL)), function() : void 
                {
                    var loader : Loader = Loader(this.latestData );
                    var domain : ApplicationDomain = loader.contentLoaderInfo.applicationDomain;
                    stayMotion = new (domain.getDefinition("StayMotion") as Class);
                },
                onLoadSWF
            ).execute();
        }
        protected function onLoadSWF() : void 
        {
            graphics.beginFill(0)
            graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
            var i : uint, fmt : TextFormat, bm : Bitmap;
            _activeParticles = new Vector.<Particle>();
            _inactiveParticles = new Vector.<Particle>();
            //for (i = 0; i < 1; i++) _inactiveParticles.push(new Particle());
            _film = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0);
            bm = new Bitmap(_film);
            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;
            _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 = (900 + Math.random() * 950) >> 0;
            var sp : Sprite, bm : Bitmap, bmd : BitmapData, t : ITween;
            var m : Matrix = new Matrix();
            m.translate(stayMotion.width / 2, stayMotion.height);
            bmd = new BitmapData(stayMotion.width, stayMotion.height, true, 0);
            bmd.draw(stayMotion, m);
            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;
            //addChild(sp);
            t = BetweenAS3.serial(BetweenAS3.to(sp, 
                {
                    scaleX : 2,
                    scaleY : 2,
                    rotation : 0
                }, 3, 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) + 100;
                    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 = 10;
                    _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
            BetweenAS3.serial(BetweenAS3.addChild(flash, this),
                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;
}