forked from: ファンネル(ビット)wonderfl移植

by Flagfighter172 forked from ファンネル(ビット)wonderfl移植 (diff: 1)
左下に数値入力後、右下の●をクリックでファンネル生成
生成後は画面の上半分あたりクリックで射出
♥0 | Line 113 | Modified 2012-01-23 13:51:58 | MIT License
play

ActionScript3 source code

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

// forked from umroom's ファンネル(ビット)wonderfl移植
/*
左下に数値入力後、右下の●をクリックでファンネル生成
生成後は画面の上半分あたりクリックで射出
*/

package
{
    import flash.display.*;
    import flash.events.*;
    import flash.text.*;
    [SWF(width="300", height="300", backgroundColor="0x000000", frameRate="30")]  
    
    public class Main extends MovieClip
    {
        private var _bt_mc:MovieClip = new MovieClip();
        private var _txt:TextField = new TextField();
        private var _bitNum:uint=0;
        
        
        public function Main():void
        {
            _txt.height=30;
            _txt.x = 30;
            _txt.y = 270;
            _txt.background=true;
            _txt.backgroundColor=0xFFFFFF;
            _txt.type = TextFieldType.INPUT;
            _txt.text = "6";
            _txt.restrict="0-9";
            addChild(_txt);

            _bt_mc.graphics.beginFill(0xFF00FF);
            _bt_mc.graphics.drawCircle(0,0,20);
            _bt_mc.graphics.endFill();
            _bt_mc.x = 260;
            _bt_mc.y = 280;
            _bt_mc.buttonMode=true;
            _bt_mc.addEventListener(MouseEvent.CLICK, init);
            addChild(_bt_mc);
        }
        
        
        private function init(me:MouseEvent):void
        {
            stage.addEventListener(MouseEvent.MOUSE_UP, startMv);
            for(var i:uint=1; i<=_bitNum; i++){    removeChild( getChildByName("bit_"+i) );    }
            
            _bitNum = uint(_txt.text);
            
            for(i=1; i<=_bitNum; i++){
                var bit:Bit=new Bit();
                bit.name="bit_"+i;
                bit.rotation = 360*(i-1)/_bitNum;
                bit.x = 150 + 30*Math.sin(bit.rotation * Math.PI/180);
                bit.y = 150 + -30*Math.cos(bit.rotation * Math.PI/180);
                addChild(bit);
            }
        }
        
        
        private function startMv(me:MouseEvent):void
        {
            if(mouseY<250){
                stage.removeEventListener(MouseEvent.MOUSE_UP, startMv);
                for(var i:uint=1; i<=_bitNum; i++){    Bit(getChildByName("bit_"+i)).init( i%3*0.2 );    }
            }
        }
        
    }
}


    import flash.display.*;
    import flash.events.*;
    import gs.*; 
    import gs.easing.*;
    
    
    class Bit extends MovieClip
    {
        private var _laser_mc:MovieClip = new MovieClip();
        
        public function Bit():void
        {
            addEventListener(Event.REMOVED_FROM_STAGE, remove);
            
            graphics.beginFill(0xF0F0F0);
            graphics.moveTo( 0, 0 );
            graphics.lineTo( -5, 24 );
            graphics.lineTo( 5, 24 );
            graphics.endFill();
            
            _laser_mc.graphics.lineStyle(2, 0xFFFFCC);
            _laser_mc.graphics.moveTo(0, 0);
            _laser_mc.graphics.lineTo(0, -600);
            _laser_mc.scaleY=0;
            addChild( _laser_mc );
        }
        
        
        function remove(e:Event):void
        {
            removeEventListener(Event.ENTER_FRAME, rot);
            removeEventListener(Event.REMOVED_FROM_STAGE, remove);
            TweenMax.killTweensOf(this);
            TweenMax.killTweensOf(_laser_mc);
        }
        
        
        public function init(delayTime:Number):void
        {
            var startX:int = 150+300*Math.sin(rotation * Math.PI/180);
            var startY:int = 150-300*Math.cos(rotation * Math.PI/180);
            
            TweenMax.to( this, 0.2+Math.random()*0.2, { delay:delayTime, x:startX, y:startY, ease:Cubic.easeIn, onComplete:startMv});
        }
        
        
        public function startMv():void
        {
            addEventListener(Event.ENTER_FRAME, rot);
            
            var scaleVal:Number = 0.3+Math.random()*0.7;
            var bezierData:Array = [
                                                            {x:Math.random()*300, y:Math.random()*300},
                                                            {x:Math.random()*300, y:Math.random()*300}
                                                            ];
            
            TweenMax.to( this, 0.4+Math.random()*0.4, { delay:0.3+Math.random()*0.2, bezier:bezierData, scaleX:scaleVal, scaleY:scaleVal,
                                             ease:Cubic.easeInOut, onComplete:shot});
        }
        
        
        private function shot():void
        {
            removeEventListener(Event.ENTER_FRAME, rot);
            
            _laser_mc.scaleY=0;
            _laser_mc.alpha=1;
            _laser_mc.visible=true;
            
            TweenMax.to(_laser_mc, 0.5, {scaleY:1, ease:Cubic.easeOut} );
            TweenMax.to(_laser_mc, 0.3, {delay:0.2, autoAlpha:0, ease:Linear.easeNone, onComplete:startMv} );
            
        }

        
        private function rot(e:Event):void
        {
            rotation = 180*Math.atan2(MovieClip(parent).mouseY-y, MovieClip(parent).mouseX-x)/Math.PI+90;
        }
        
        
    }