AS3 stage.addChild / stage.removeChild << Должен быть дочерним по отношению к вызывающей стороне - PullRequest
1 голос
/ 12 августа 2011

Если я использую функцию, чтобы добавить mc на сцену, вот так:

var myChild:MC= new MC();

function somefunc()
{
   stage.addChild(myMC)
}

, но когда я пытаюсь удалить mc:

stage.removeChild(myMC)

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

Ответы [ 5 ]

6 голосов
/ 12 августа 2011

Ваш код должен работать, если предмет находится на сцене. Возможно, квалифицируя это условным утверждением, например:

if (myMC.stage != null)
   stage.removeChild(myMC);

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

if (myMC.parent != null)    
   myMC.parent.removeChild(myMC);
3 голосов
/ 29 сентября 2011

Проблема не с removeChild.Это с помощью списка отображения.Если вы проверяете родительское свойство объекта displayobject, при вызове «removeChild» оно будет иметь значение null.

Почему оно становится нулевым, может быть по нескольким причинам:обнуляется перед дочерним элементом.

У дочернего или родительского элемента есть прослушиватели событий, которые не позволяют им умереть. Экранный объект на самом деле не тот экземпляр, который вы пытаетесь удалить.Это может быть очень сложно выяснить. Посмотрите на "имя и родительские свойства" переменной, которую вы пытаетесь удалить, вызывая removeChild .
2 голосов
/ 12 августа 2011

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

1 голос
/ 12 августа 2011

Вы также можете использовать этот отказоустойчивый:

if (myMC.parent) myMC.parent.removeChild (myMC);

0 голосов
/ 17 октября 2013

Я мог бы решить эту проблему, просто удалив все EventListeners, которые я добавил к этому объекту перед его удалением.

...