在其他函数中达到变量

时间:2014-01-12 11:45:51

标签: actionscript-3

我将游戏作为毕业项目并遇到了一个小问题。游戏的目标是操纵船只并尽可能长时间避开小行星。我差不多完成了,但我现在正试图解决碰撞检测问题。

我的问题是如何在循环变量中到达敌人,以便它可以检查与它的碰撞?这是代码:

  package com.asgamer.basics1
{
    import flash.display.MovieClip;
    import flash.display.Stage;
    import flash.events.Event; 

    public class Engine extends MovieClip
    {


    private var numStars:int = 80;

    private static var enemyList:Array = new Array();

    private var ourShip:Ship;

    public function Engine() : void
    {

        ourShip = new Ship(stage);          
        ourShip.x = stage.stageWidth / 2;
        ourShip.y = stage.stageHeight / 2;
        stage.addChild(ourShip);


        for (var i:int = 0; i < numStars; i++)
        {
            stage.addChildAt(new Star(stage), 1)
        }


        addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
        stage.addEventListener(Event.ENTER_FRAME, krash);



    }


    private function krash(e:Event) : void
    {
        function krash(e:Event):void
        {                   

            if (enemy.hitTestObject(ourShip)==true)
            {
                    stage.removeChild(ourShip);
                    stage.removeEventListener(Event.ENTER_FRAME, krash);
            }
        }
    }

    private function loop(e:Event) : void
    {

        if (Math.floor(Math.random() * 10) == 5)
        {

            var enemy:Asteroid = new Asteroid(stage);

            enemy.addEventListener(Event.REMOVED_FROM_STAGE, removeEnemy, false, 0, true);

            enemyList.push(enemy);

            stage.addChild(enemy);



        }
    }



    private function removeEnemy(e:Event)
    {
        enemyList.splice(enemyList.indexOf(e.currentTarget), 1);
    }




}

}

正如你所看到的,我有一个叫做循环的敌人的功能,还有一个叫做krash的碰撞检测功能。但由于敌人是一个变量内循环,我如何在krash函数中检查它与它的碰撞。 (对动作脚本的新内容,所以我不太了解术语)

1 个答案:

答案 0 :(得分:0)

在krash中,您需要检查enemy中的每个enemyList

例如:

private function krash(e:Event) : void
{
    function krash(e:Event):void
    {                   
        for(var i:int = 0; i < enemyList.length; i++)
        {
            if (enemyList[i].hitTestObject(ourShip)==true)
            {
                   stage.removeChild(ourShip);
                   stage.removeEventListener(Event.ENTER_FRAME, krash);
            }
        }
    }
}


不幸的是,如果你在舞台上有很多敌人,那么程序会有所滞后,因为你每帧都要检查所有敌人的碰撞。


此外,我建议你添加一些东西来从屏幕上删除你的敌人:P

private function removeEnemy(e:Event)
{
    enemyList.splice(enemyList.indexOf(e.currentTarget), 1);
    stage.removeChild(enemyList.indexOf(e.currentTarget));
}



希望这会有所帮助。