Я создаю шахтерскую игру (где есть кусочки золота, и вы должны поймать их крюком). Я модифицировал класс Main, чтобы взять всех дочерних элементов MovieClip (root) с именем «Gold», и поместить их в массив (boulders []), где позже проверить столкновение (я разрабатываю и помещаю на сцену несколько «Gold» MovieClips для каждого уровень). Когда игрок собирает все золото (когда массив валунов array.length ‹= 0), то переходите к нему goToAndStop(nextLevel), где снова он берет золотые мувиклипы со сцены и, если его имя == "Gold", то кладет его в валун[ ]. Что произошло: На первом уровне (кадр 2, потому что кадр 1 является предзагрузчиком) все хорошо - у меня на сцене 2 золотых мувиклипа (в режиме дизайна), и все 2 золотых помещаются в массив и отображаются. На втором уровне у меня 4 золота и только 2 из них кладутся в массив и отображаются. На третьем уровне у меня есть 7 золотых, разработанных на сцене, но только 3 отображаются и помещаются в массив валунов. Это почти предыдущий счет золота (на предыдущем кадре) вычитается из счета золота следующего кадра мувиклипа. У кого-нибудь есть идеи?
Я размещаю код 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» в массив валунов и помещаю их на сцену. Затем добавьте стручок и стержень.
private function placePod():void {
pod = new Pod();
addChild(pod);
pod.createRod();
}
А вот функция, которая слушает нажатие клавиши и удаляет валуны, затем, если boulder.length ‹= 0, удаляет всех слушателей и goToAndStop(nextLevel) и снова вызывает функцию createLevel(), чтобы снова загрузить золотые мувиклипы следующего кадра. Здесь возникает проблема, которую я описал выше.
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();
}
}