Actionscript 3 创建多个级别AS3

Actionscript 3 创建多个级别AS3,actionscript-3,hittest,Actionscript 3,Hittest,嘿,伙计们,我在创建多个关卡时遇到了点麻烦。我不太确定我是否用正确的方式创造了他们,但我有一个球员和目标1,目标2,等等。。基本上,当玩家命中目标时,我希望它进入一个新的函数,称为level_2,然后在命中测试后进入level_3。所以等级1很好,命中测试很好,它初始化等级2,但当我尝试再次命中玩家和目标2,甚至目标1时,它只是通过它,什么也不做 我现在了解到,级别2并不像级别1那样被每个帧调用,因为它不是Enter\u帧侦听器的一部分。但我不知道如何让多个Enter Frame事件同时运行。如

嘿,伙计们,我在创建多个关卡时遇到了点麻烦。我不太确定我是否用正确的方式创造了他们,但我有一个球员和目标1,目标2,等等。。基本上,当玩家命中目标时,我希望它进入一个新的函数,称为level_2,然后在命中测试后进入level_3。所以等级1很好,命中测试很好,它初始化等级2,但当我尝试再次命中玩家和目标2,甚至目标1时,它只是通过它,什么也不做

我现在了解到,级别2并不像级别1那样被每个帧调用,因为它不是Enter\u帧侦听器的一部分。但我不知道如何让多个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();

        }

    }

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

然后,传递引用并调用_dou函数,而不是调用level1函数:

_doFunction = level1;
_doFunction();//or _doFunction.call(); - see Adobes documentation
完成级别1后,通过下一个级别:

_doFunction = level2;

另外,如果答案有助于解决你的问题,不要忘记接受它。

有趣。因此,将函数声明为:Private function _doFunction:function;然后我会从我的游戏循环中删除level_1函数吗?在我的Enter_Frame游戏循环中添加-doFunction函数,就像这样-doFunction();我想你并没有像我上面所说的那样去做。我在尝试将函数添加到Enter_Frame循环类型错误:error#1006:value不是一个函数。声明变量函数后,别忘了给它指定一个函数,例如level1。在游戏循环中,只需调用_dofunction()。然后,当在level1中满足条件时,将_doFunction重新分配给point level2函数;在Gameloop中,并在构造函数中将其声明为:levelManager=level_1;levelManager();然后在我的Level_1函数中,我将其添加到hitTest中:levelManager=Level_2;levelManager();它工作得非常好,跟踪速度为每秒25帧。非常感谢你!唯一的问题是,在第2级中没有任何东西可以工作。添加了对象,但arnt interactive guess我必须以某种方式解决这个问题,但感谢这么多人花时间来帮助!是的,我不确定我的播放器是否每秒移动25帧。我跟踪了它,它在第2层只移动了一次
_doFunction = level2;