嘿伙计们,所以我在创建多个级别时遇到了一些麻烦。我不太确定我是否以正确的方式创建它们但我有一个玩家和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();
}
}
答案 0 :(得分:0)
我没有仔细阅读所有代码,但我想你可以使用函数变量。在类级别(在任何函数之外)声明它:
var _doFunction:Function;
而不是调用level1函数,传递引用并调用_doFunction:
_doFunction = level1;
_doFunction();//or _doFunction.call(); - see Adobes documentation
当你完成了level1,而不是传递下一个级别:
_doFunction = level2;
P.S。如果它有助于解决您的问题,请不要忘记接受答案。