Эй, ребята, поэтому у меня небольшая проблема с созданием нескольких уровней. Я не уверен, что если я создаю их правильно, но у меня есть игрок и цель_1, цель_2 и т. Д. В принципе, когда игрок hitTestObject цели_1, я хочу, чтобы он перешел к новой функции, называемой level_2, затем level_3 после этого hitTest. поэтому Level_1 работает просто отлично, потому что hitTest работает, и он инициализирует level_2, но когда я пытаюсь hitTest игрока и goal_2 или даже goal_1 снова, он просто проходит через него и ничего не делает.Создание нескольких уровней AS3
Теперь я понимаю, что 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();
}
}
Интересно. Поэтому объявите функцию как: Частная функция _doFunction: Function; Затем я бы удалил функцию level_1 из моего gameLoop, добавив -doFunction внутри моего Enter_Frame gameLoop, как this -doFucntion(); Десять приходят к ним, как вы сказали выше? – Nathan
Я думаю, вы не делаете этого, как я сказал выше. Я получил эту ошибку при попытке добавить функцию внутри цикла Enter_Frame TypeError: Ошибка # 1006: значение не является функцией. – Nathan
после объявления переменной функции, не забудьте назначить ей функцию, например. 1-й уровень. В игровом цикле вам нужно вызвать только _doFucntion(). Затем, когда условие выполняется в level1, переназначьте функцию _doFucntion до point level2. – GeorgeCross