创建多个级别AS3

时间:2013-04-06 17:44:14

标签: actionscript-3 hittest

嘿伙计们,所以我在创建多个级别时遇到了一些麻烦。我不太确定我是否以正确的方式创建它们但我有一个玩家和goal_1,goal_2等等。基本上当玩家点击目标对象时我想让它去一个名为level_2的新函数,然后是hitTest之后的level_3。所以Level_1可以很好地运行hitTest并初始化level_2但是当我尝试再次击中玩家和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();

        }

    }

1 个答案:

答案 0 :(得分:0)

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

var _doFunction:Function; 

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

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

当你完成了level1,而不是传递下一个级别:

_doFunction = level2;

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