MovieClips на сцене исчезают - PullRequest
       34

MovieClips на сцене исчезают

0 голосов
/ 30 января 2012

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

1 Ответ

0 голосов
/ 06 марта 2012

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

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

...