Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 闪光中的子弹轨迹_Actionscript 3_Flash_Actionscript_Velocity - Fatal编程技术网

Actionscript 3 闪光中的子弹轨迹

Actionscript 3 闪光中的子弹轨迹,actionscript-3,flash,actionscript,velocity,Actionscript 3,Flash,Actionscript,Velocity,我目前正在创造一颗子弹,它跟随我的头像,一旦我击中空格键就会产生子弹,但我有点困惑,我该如何提供速度/轨迹来与我的敌人碰撞。任何帮助都可以 游戏文件 package { import flash.display.MovieClip; import flash.events.Event; import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.Keyboard

我目前正在创造一颗子弹,它跟随我的头像,一旦我击中空格键就会产生子弹,但我有点困惑,我该如何提供速度/轨迹来与我的敌人碰撞。任何帮助都可以

游戏文件

package
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;
    import flash.external.ExternalInterface;
    import flash.display.Sprite;
    import flash.utils.*;

    public class SpaceVigilanteGame extends MovieClip

    {
        public var army:Array;
        public var avatar:Avatar;
        public var bullet:Bullet;
        public var gameTimer:Timer;
        public var useMouseControl:Boolean; 
        public var rightKeyIsBeingPressed:Boolean;
        public var leftKeyIsBeingPressed:Boolean; 
        public var spaceBarIsBeingPressed:Boolean;
        var gameWidth:int = 0;
        var gameHeight:int = 0;

        public function log(message:String):void
        {
            trace (message);
            if (ExternalInterface.available)
            {
                ExternalInterface.call('console.log', message);
            }
        }

        public function SpaceVigilanteGame()
        {   useMouseControl = false;
            leftKeyIsBeingPressed = false;
            rightKeyIsBeingPressed = false;
            spaceBarIsBeingPressed = false;
            army = new Array();
            var newEnemy = new Enemy( 60, 30 );
            army.push( newEnemy );
            addChild( newEnemy );
            avatar = new Avatar();
            addChild( avatar );

            if ( useMouseControl )
            {
                avatar.x = mouseX;
                avatar.y = mouseY;
            }
            else
            {
                avatar.x = 50;
                avatar.y = 400;
            }

            gameWidth = stage.stageWidth;
            gameHeight = stage.stageHeight;


            gameTimer = new Timer( 25 );
            gameTimer.addEventListener( TimerEvent.TIMER, moveEnemy );
            gameTimer.addEventListener( TimerEvent.TIMER, moveAvatar );
            gameTimer.addEventListener( TimerEvent.TIMER, shoot );
            gameTimer.start();
            stage.addEventListener( KeyboardEvent.KEY_DOWN, onKeyPress );
            stage.addEventListener( KeyboardEvent.KEY_UP, onKeyRelease );
            //Respawn enemies
            var myInterval:uint = setInterval (spawnEnemy, 2000);

        function spawnEnemy(){
            var posX = Math.floor(Math.random() * (660 - 25 + 1)) + 35;
            var newEnemy = new Enemy( posX, 30 ); 
            army.push( newEnemy );
            addChild( newEnemy );
        }   

        function onKeyPress( keyboardEvent:KeyboardEvent ):void
        {
            if ( keyboardEvent.keyCode == Keyboard.RIGHT )
            {
                rightKeyIsBeingPressed = true;
            }
            else if ( keyboardEvent.keyCode == Keyboard.LEFT ) 
            {
                leftKeyIsBeingPressed = true;
            }
            else if (keyboardEvent.keyCode == Keyboard.SPACE )
            {
                spaceBarIsBeingPressed = true;
            }
        }
        function onKeyRelease( keyboardEvent:KeyboardEvent ):void
        {
            if ( keyboardEvent.keyCode == Keyboard.RIGHT )
            {
                rightKeyIsBeingPressed = false;
            }
            else if (keyboardEvent.keyCode ==Keyboard.LEFT )
            {
                leftKeyIsBeingPressed = false;
            }
            else if (keyboardEvent.keyCode == Keyboard.SPACE )
            {
                spaceBarIsBeingPressed = false;
            }
        }
        }
        public function moveEnemy( timerEvent:TimerEvent ):void 
        {
            // Set up Enemy Array
            for each ( var enemy:Enemy in army ) 
            {
                if ( avatar.hitTestObject( enemy ) ) 
                {
                    // game over screen
                    gameTimer.stop();
                    var gameOverScreen:GameOverScreen = new GameOverScreen();
                    gameOverScreen.x = 0;
                    gameOverScreen.y = 0;
                    addChild( gameOverScreen );
                }
                // Have enemy move to one side of the screen, drop down a pixel, and move into the other direction
                else if(enemy.x+enemy.width+2<=gameWidth)
                {
                    enemy.moveRight();
                }
                else if(enemy.y+enemy.height+2<=gameHeight)
                {
                    enemy.moveDown();
                }
                else if(enemy.x-2>=0)
                {
                    enemy.moveLeft();
                }
                else if(enemy.y-2>=0)
                {
                    enemy.moveUp();
                }
                //Loop enemy back to top
                if (enemy.y >= 460){
                    var newEnemy = new Enemy( 60, 30 );
                    army.push( newEnemy );
                    addChild( newEnemy );
                    enemy.y = 0;
                }

            }

        }
        public function moveAvatar( timerEvent:TimerEvent ):void
        {   
            // Boolean statement is set to false, so that the mouse control doesn't work
            if ( useMouseControl )
            {
                avatar.x = mouseX;
                avatar.y = mouseY;
            }
            // move avatar left and right
            else if ( rightKeyIsBeingPressed )
                {
                    if (avatar.x <= 660){
                        avatar.moveRight();
                    }
                }
            else if ( leftKeyIsBeingPressed )
                {
                    if (avatar.x >= 35){
                        avatar.moveLeft();
                    }

                }
        }
        // shoot bullet
        public function shoot (timerEvent:TimerEvent ):void
        {

            if ( spaceBarIsBeingPressed )
            {
                bullet = new Bullet(avatar.x, avatar.y);
                addChild( bullet ); 
                bullet.moveBullet();
            }
        }


    }
}

你必须把目标交给一颗子弹,如果它打算朝着目标飞去,然后计算子弹到目标之间的相关矢量,并将一颗子弹按预定速度向前移动这个矢量。难道我不能让子弹沿着y轴移动,直到它离开屏幕并移除它吗?这取决于你的游戏设置。你当然可以这样做,但如果有什么不同的话,你会得到更多的多样性,如果你给子弹一个目标,当然可以是可选的。我不清楚你到底想做什么。你希望子弹有什么轨迹?它是如何与敌人发生碰撞的?基本上是定位你的化身并向敌人射击,如果子弹击中了敌人,那么将子弹和敌人都从屏幕上移除。
package 
{
    import flash.display.MovieClip;


    public class Bullet extends MovieClip
    {       
        public function Bullet(xPos:Number, yPos:Number)
        {
            x = xPos;
            y = yPos;
        }

        public function moveBullet():void
        {
            y += 2;
        }
    }
}