0

嘿伙计们,所以我在创建多个级别时遇到了一些麻烦。我不太确定我是否以正确的方式创建它们,但我有一个玩家和goal_1、goal_2 等。基本上当玩家hitTestObject 的goal_1 时,我希望它去一个名为level_2 的新函数,然后在那个hitTest 之后进入level_3。所以 Level_1 工作得很好,hitTest 工作正常,它初始化了 level_2 但是当我再次尝试 hitTest 玩家和 goal_2 甚至是 goal_1 时,它只是通过它而不做任何事情。

我现在明白了 level_2 并不是像 level_1 那样在每一帧都被调用,因为它不是 Enter_Frame 侦听器的一部分。但我不知道如何让多个 Enter Frame 事件同时运行。如果那甚至是创建多个级别的正确方法。

你能看到我能做些什么来让它发挥作用吗?

private function gameLoop(e:Event):void 
    {
        playerShoot();
        playerControl();
        playerStageBoundaries();

        checkEndGameCondition();
        checkPlayerOffScreen();

        level_1();
    }


    private function level_1():void 
    {


        if(player.hitTestObject(mGoal_1))
           {

            trace("Goal_1 Collision");
            //Remove button for constant movement
            btnShootPlayer = false;
            mGoal_1.destroyGoal_1();
            player.destroyPlayer();
            //Update High Score text
            nScore += 10;
            updateHighScore();
            stage.removeEventListener(Event.ENTER_FRAME, gameLoop);
            //Update level
            nLevel++;
            updatePlayerLevel();
            level_2();

           }else
           {

               checkEndGameCondition();
           }
    }



    public function level_2():void 
    {

        stage.addEventListener(Event.ENTER_FRAME, gameLoop);
       TweenMax.to(mGoal_1, 1, {y:40, repeat:-1, yoyo:true, ease:Power0.easeInOut});
        trace("Level_2 Initiated");
        //Keep Text Scores initiated
        updateHighScore();
        updatePlayerLives();

        player = new mPlayer();
        stage.addChild(player);
        player.x = (stage.stageWidth / 2) - 280;
        player.y = (stage.stageHeight / 2);

        mGoal_1 = new goal_1();
        stage.addChild(mGoal_1);
        mGoal_1.x = (stage.stageWidth / 2) + 300;
        mGoal_1.y = (stage.stageHeight) - 35;

        if (player.hitTestObject(mGoal_1))
        {
            trace("Level 2 Hit test works!");


            nScore += 10;
            updateHighScore();

        }

    }
4

1 回答 1

0

我没有仔细阅读所有代码,但我猜你可以使用函数变量。在类级别声明它(在任何函数之外):

var _doFunction:Function; 

而不是调用 level1 函数,传递引用并调用 _doFunction:

_doFunction = level1;
_doFunction();//or _doFunction.call(); - see Adobes documentation

完成第 1 级后,通过下一个级别:

_doFunction = level2;

PS如果它有助于解决您的问题,请不要忘记接受答案。

于 2013-04-06T20:07:15.307 回答