forked from: Ерунда

by bradsedito forked from Ерунда (diff: 145)
♥0 | Line 109 | Modified 2013-06-25 06:57:13 | MIT License
play

ActionScript3 source code

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






package
{
    import flash.display.*
    import flash.events.*
    import flash.text.*


    public class Main extends Sprite 
    {
        public   var _pcos     :Number
        public   var _psin     :Number
        public   var _endX     :Number
        public   var _endY     :Number
        public   var _bullets  :Array  =  new Array()
        private  var _speed    :Number =  5
        private  var _arrow    :Arrow


        public function Main()
        {
            init();
        }

        private function init():void
        {
            addChild( _arrow=new Arrow );
            stage.addEventListener( Event.ENTER_FRAME,enterFrameHandler );
        }
        
        private function enterFrameHandler( $event:Event ):void
        {
            var dx:Number = mouseX - _arrow.x;
            var dy:Number = mouseY - _arrow.y;
            if(Math.abs(dx) < 2 && Math.abs(dy) < 2){
                return;
            }

            var angle:Number = Math.atan2(dy, dx);

            _arrow.rotation = angle * 180 / Math.PI;
            _arrow.x += Math.cos(angle) * _speed;
            _arrow.y += Math.sin(angle) * _speed;
            createBullet();
            updateBullets();
        }

        private function createBullet():void

        {

            var tempBullet:MovieClip = new Bullet();
             _pcos = Math.cos(_arrow.rotation * Math.PI / 180);
             _psin = Math.sin(_arrow.rotation * Math.PI / 180);
            var  _startX:Number = _arrow.x - 20 * _pcos;
            var  _startY:Number = _arrow.y - 20 * _psin;

             _endX = _arrow.x - 50 * _pcos + Math.random() * 20 - 20 * .5;
             _endY = _arrow.y - 50 * _psin + Math.random() * 20 - 20 * .5;            

            tempBullet.vx = (_endX - _startX) / 2;
            tempBullet.vy = (_endY - _startY) / 2;
  
            tempBullet.x = _startX;
            tempBullet.y = _startY;
 
            tempBullet.startX = _startX;
            tempBullet.startY = _startY;

            _bullets.push(tempBullet);
       
            stage.addChild(tempBullet);
        }


        private function updateBullets():void
        {
            var i:int;
            var tempBullet:MovieClip;

            for (i = 0; i < _bullets.length; i++)
            {
                // save a reference to current bullet
                tempBullet = _bullets[i];
         
                // update bullet position
                tempBullet.x += tempBullet.vx;
                tempBullet.y += tempBullet.vy;    
            }
        }
    }
}


import flash.display.Sprite;
class Arrow extends Sprite
{
    function Arrow()
    {
        init();
    }    


    private function init():void
    {
        graphics.beginFill(0xd90028);
        graphics.lineStyle(0);
        graphics.moveTo(20, 0);
        graphics.lineTo(0, 20);
        graphics.lineTo(0, 10);
        graphics.lineTo(-20, 10);
        graphics.lineTo(-20, -10);
        graphics.lineTo(0, -10);
        graphics.lineTo(0, -20);
        graphics.lineTo(20, 0);
        graphics.endFill();
    }
}


import flash.display.MovieClip

class Bullet extends MovieClip 
{
    public var maxDistance:Number;
    public var startX:Number;
    public var startY:Number;
    public var vx:Number;
    public var vy:Number;

    function Bullet()
    {
        init();
    }

    private function init():void
    {
        graphics.beginFill(0x00000c);
        graphics.drawCircle(0, 0, Math.random()*5);
        graphics.endFill();
    }
}