flash on 2010-7-23

by dizgid
♥0 | Line 167 | Modified 2010-07-24 14:36:21 | MIT License
play

ActionScript3 source code

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

package {
    import flash.events.MouseEvent;
    import flash.display.Sprite;
    
     [SWF(frameRate = "60", backgroundColor = "#000000")]
    public class FlashTest extends Sprite {
        public function FlashTest() {
            // write as3 code here..
            var _w_num:int = 5;
            var _h_num:int = 5;
            
            var offsetX:Number = -(4*15) * (_w_num-1) / 2;
            var offsetY:Number = -(4*15) * (_h_num-1) / 2;
            for(var i:int = 0; i < _w_num*_h_num; i++){
            var panel:Panel = new Panel();
            this.addChild(panel);
            
            panel.x = stage.stageWidth * 0.5 + offsetX + Math.floor(i%_w_num)*(4*15);
            panel.y = stage.stageHeight * 0.5 + offsetY + Math.floor(i/_h_num)*(4*15);
            
            panel.addEventListener(MouseEvent.CLICK, mouseClickHandler);
            }
        }
        private function mouseClickHandler(e:MouseEvent):void
        {
            Panel(e.currentTarget).startAnime();
        }

    }
}
import flash.events.Event;
import flash.display.Graphics;

import flash.display.Sprite;
import flash.utils.getTimer;
internal class Panel extends Sprite
{
    private var _preTime:Number;
    public var dTime:Number;
    
    private var _particles:Array;
    public function Panel()
    {
        var _w_num:int = 6;
        var _h_num:int = 6;
        var pSize:Number = (15*4)/6;
        _particles = [];
        for(var i:int=0; i < _w_num*_h_num; i++){
            var p:Particle = new Particle();
            p.initSize = pSize;
            p.size = pSize + 2;
            p.x = Math.floor(i%_w_num) * pSize - (_w_num-1)*pSize/2;
            p.y = Math.floor(i/_w_num) * pSize - (_h_num-1)*pSize/2;
            p.z = 0;
            
            p.iX = p.x;
            p.iY = p.y;
            
            p.draw();
            this.addChild(p);
            
            _particles.push(p);
        }
        _preTime = getTimer();
        this.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
    }
    
    private function enterFrameHandler(e:Event):void
    {
        update();
        draw();
    }

    public function update():void
    {
        var nowTime:Number = getTimer();
        dTime = nowTime - _preTime;
        _preTime = nowTime;
        
        //this.x += dTime/100 * 2;
        for(var i:int = 0; i < _particles.length; i++){
           var p:Particle = _particles[i];
           p.update(dTime);
       }
    }
    public function draw():void
    {
       for(var i:int = 0; i < _particles.length; i++){
           var p:Particle = _particles[i];
           p.draw();
       }
    }
    public function startAnime():void
    {
       for(var i:int = 0; i < _particles.length; i++){
           var p:Particle = _particles[i];
           p.startAnime();
       }
    }
}


internal class Particle extends Sprite
{
    public var size:Number;
    
    public var initSize:Number = 0;
    
    public var iX:Number;
    public var iY:Number;
    public var iZ:Number;    
    //
    public var rX:Number;
    public var rY:Number;
    public var rZ:Number;
    
    public var sX:Number;
    public var sY:Number;
    public var sZ:Number;
    
    public var vAlpha:Number;
    
    private var _isStartAnime:Boolean = false;
    private var _isHide:Boolean = false;
    
    public function Particle()
    {
        size = initSize+2;
        // ランダムなパラメータ
        sX = Math.random() * 40 -20;
        sY = Math.random() * 40 -20;
        sZ = Math.random() * 40 -20;
        
        rX = Math.random() * 40 -20;
        rY = Math.random() * 40 -20;
        rZ = Math.random() * 40 -20;
        
        sZ = Math.random() * 40 + 20;
        
        vAlpha = 0.1;
        
        rX *= 4;
        rY *= 4;
        rZ *= 4;
        
        sZ *= 2;
        draw();
    }
    
    public function startAnime():void
    {
        _isStartAnime = true;
    }

    public function update(dTime:Number):void
    {
        if(!_isStartAnime)
        {
            return;
        }
        
        if(this.alpha > 0 && !_isHide){
            size = initSize * 0.75;
            this.x += dTime / 1000 * sX;
            this.y += dTime / 1000 * sY;
            this.z += dTime / 1000 * sZ;
            
            this.rotationX += dTime / 1000 * rX;
            this.rotationY += dTime / 1000 * rY;
            this.rotationZ += dTime / 1000 * rZ;
            
            this.alpha += -dTime / 1000 * vAlpha;
        }else{
            _isHide = true;
            initAnime(dTime);
        }
    }
    
    private function initAnime(dTime:Number):void
    {
        size = initSize+2;
        this.x = this.iX;
        this.y = this.iY;
        this.z = 0;
        this.alpha += dTime / 1000;
        this.rotationX = 0;
        this.rotationY = 0;
        this.rotationZ = 0;
        
        if(this.alpha > 1.0){
           
           this.alpha = 1.0;
           _isStartAnime = false;
           _isHide = false;
        }
    }


    public function draw():void
    {
        var g:Graphics = this.graphics;
        g.clear();
        g.beginFill(0xffffff, 1.0);
        g.drawRect(-size*0.5, -size*0.5, size, size);
        g.endFill();
    }

}