Киноклипы на сцене исчезают

Я создаю шахтерскую игру (где есть кусочки золота, и вы должны поймать их крюком). Я модифицировал класс 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();
                }
                }

person Mariyan    schedule 30.01.2012    source источник
comment
По моему мнению, это происходит из-за того, что дети MovieClip (root) не удаляются, и если в кадре 2 есть 3 MovieClips с именем gold, а в кадре 3 есть 5 MovieClips с именем gold, отображаются только два MovieClips, потому что другие 3 все еще существуют. Я пробую это: MovieClip(root).removeChild(boulder); в функции removeBoulder, но она не работает.   -  person Mariyan    schedule 30.01.2012
comment
Хорошо, я нашел решение :-) Я оставляю пустые ключевые кадры между каждым ключевым кадром (кадр уровня). И это работает. Теперь мой nextLevel var увеличивается на два каждый раз, когда я хочу перейти на следующий уровень, а не добавляю один.   -  person Mariyan    schedule 30.01.2012


Ответы (1)


самое простое решение любых проблем, связанных с глобальными свойствами

когда вы создаете что-то во флэш-памяти, сначала добавьте пустой мувиклип, дайте ему экземпляр, такой как игра или викторина, затем дважды щелкните свой муви-клип, а затем верните проект на основную временную шкалу, чтобы ввести весь свой код, а теперь все ваши переменные, а что нет может быть глобальным

person joshua    schedule 06.03.2012