Я создаю игру шахтера (где есть кусочки золота, и вы должны ловить их крючком).
Я изменил основной класс так, чтобы он брал всех потомков MovieClip (root) с именем «Gold» и помещал их в массив (boulders []), где позже проверял столкновение (я проектирую и ставлю на сцену несколько «Gold» MovieClips для каждого уровень). Когда игрок собирает все золото (когда boulders array.length <= 0), тогда goToAndStop (nextLevel), где он снова берет золотые мувиклипы со сцены и, если его зовут == "Gold", помещает его в валун [ ].
Что случилось:
На первом уровне (кадр 2, потому что кадр 1 - предварительный загрузчик) все хорошо - у меня на сцене 2 золотых мувиклипа (в режиме дизайна), и все 2 золота помещаются в массив и отображаются.
На втором уровне у меня 4 золота, и только 2 из них помещаются в массив и отображаются.
На третьем уровне у меня есть 7 золотых, разработанных на сцене, но только 3 отображаются и помещаются в массив валунов.
Это почти предыдущий отсчет золота (на предыдущем кадре) вычитается из подсчета золотых видеоклипов следующего кадра.
У кого-нибудь есть идеи? </p>
Я размещаю код Main.as:
public function createLevel(){
nextLevel = this.currentFrame + 1;
for (var i:uint = 0; i < MovieClip(root).numChildren; i++){
if(MovieClip(root).getChildAt(i).name=="Gold")
{
this.addChild(MovieClip(root).getChildAt(i));
boulders.push(MovieClip(root).getChildAt(i));
}
}
placePod();
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPress);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyRelease);
addEventListener(Event.ENTER_FRAME, updateStatus);
}
Здесь я добавляю всех детей с именем "Gold" в массив валунов и помещаю их на сцену.
Затем добавьте Pod и стержень.
private function placePod():void {
pod = new Pod();
addChild(pod);
pod.createRod();
}
А вот функция, которая прослушивает нажатие клавиш и удаляет валуны, а затем, если boulder.length <= 0, удаляет всех слушателей и goToAndStop (nextLevel) и снова вызывает функцию createLevel (), чтобы снова загрузить золотой MovieClips следующего Рамка. Здесь возникает проблема, которую я описал выше. </p>
private function updateStatus(e:Event):void {
if (!left && !right) {
pod.setSpeed(0);
} else if (left && right) {
pod.setSpeed(0);
} else if (left) {
pod.setSpeed(-4);
} else {
pod.setSpeed(4);
}
for (var i in boulders) {
boulders[i].updateStatus();
if (boulders[i].remove) {
removeBoulder(boulders[i]);
boulders.splice(i, 1);
}
}
if(boulders.length <= 0)
{
pod.removeRod();
removeChild(pod);
stage.removeEventListener(KeyboardEvent.KEY_DOWN,onKeyPress);
stage.removeEventListener(KeyboardEvent.KEY_UP,onKeyRelease);
removeEventListener(Event.ENTER_FRAME, updateStatus);
MovieClip(root).gotoAndStop(nextLevel);
createLevel();
}
}