удаление ребенка в ActionScript 3 - PullRequest
0 голосов
/ 12 июня 2011

Я пытаюсь перезапустить игру, но у меня есть несколько проблем. Я делаю игру астероидов (основной). У меня есть следующие классы:

GameClass, Ship, Enemy.

Enemy и Ship создаются в GameClass. GameClass создается внутри DocumentClass (это основной класс).

Когда игра начинается, я запускаю игру, например.

var something:GameClass = new GameClass(); 
addChild(something); 

Игра играет как надо. Когда я пытаюсь удалить объекты, ничего не происходит .. Я делаю это так:

something = null или пробовал removeChild(something);

ни работает. Зачем? Что я делаю не так?

Ответы [ 4 ]

1 голос
/ 12 июня 2011

Немного сложно точно сказать, что происходит с вашим вопросом, не публикуя больше кода.Но выполнение removeChild (что-то) похоже на правильном пути.Я предполагаю, что когда вы звоните removeChild(something) "что-то" выходит за рамки.Может быть, попытаться сделать "что-то" частной переменной в вашем DocumentClass

0 голосов
/ 12 июня 2011

вытащите переменную, чтобы иметь доступ к ней во всем классе документа.

вот так.

package src
{
    import flash.display.Sprite;
    import flash.events.Event;

    public class DocumentClass extends Sprite
    {
        // You will have access to this var any place in this class.
        private var game:GameClass;

        public function DocumentClass()
        {
            addEventListener(Event.ADDED_TO_STAGE, initDocumentClass);
        }

        private function initDocumentClass(e:Event):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, initDocumentClass);

            game = new GameClass();
            addChild(game);


            // Now whenever you want to reset your game you can do a few things
            // the easiest would be
            removeChild(game);
            game = new GameClass();
            addChild(game);
        }
    }
}

Это также даст вам легкий доступ через систему меню и т. Д.

Любые вопросы или если я полностью пропустил вашу мысль. Просто спроси.

0 голосов
/ 12 июня 2011

Я предполагаю, что вы случайно создаете несколько экземпляров GameClass. Вы пробовали перебирать всех потомков DocumentClass?

попробуйте это из DocumentClass:

for( var i:int = 0; i < numChildren; i++ )
{
    trace( getChildAt( i ) ); 
    // or removeChild( getChildAt( i ) ) to simply get rid of them.
}

Если вы используете CS3-5, я лично заметил некоторое очень странное поведение, вызванное «автоматическим объявлением экземпляров сцены». Возможно, вы захотите посмотреть, что произойдет, если вы отключите это.

0 голосов
/ 12 июня 2011

В сценарии действия удаляет только удаление ссылок. Поэтому я предлагаю вам удалить всю сцену (или movieClip), содержащую контент для обновления, и ваш gameClass (), и воссоздать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...