Удаление спрайтов со сцены - PullRequest
0 голосов
/ 19 сентября 2010

Эй, ребята, у меня проблема с моими страницами во флэш-памяти. Итак, я создал 5 страниц, каждая из которых содержит несколько клипов (текст, графика, формы и т. Д.). Однако есть одна конкретная страница, которая содержит автоматически сгенерированный контент через. спрайты. Если я попаду на эту страницу, появятся спрайты, но когда я перейду на другую страницу, они все еще там, за исключением не спрайтовых вещей (исчезают). На этом я рву свои волосы, мне удалось убрать несколько спрайтов, но некоторые все еще появляются. Ниже показан макет того, который не удаляется;

var container:Sprite = new Sprite();

//loop places several "item" in this container sprite and a scroll bar
var item:myItem = new myItem();
var sb:customScrollBar = new customScrollBar();

container.addChild(item);
container.addChild(sb);

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

Вот что я попробовал:

removeChild(container); //nothing, this was called from another keyframe where the container was not generated from
stage.removeChild(container); //nothing

Вот ошибки. ArgumentError: Ошибка № 2025: предоставленный объект DisplayObject должен быть дочерним по отношению к вызывающей стороне.

Примечание * У меня также есть несколько кнопок, которые также были созданы НЕ внутри контейнера, как показано ниже, и они работали, когда я запускал removeChild (button1), поэтому я не знаю, почему контейнер один не работает.

FLA (cs4) http://www.4shared.com/file/2swJjnNm/mevame.html

Предварительный просмотр http://bodog -bonuses.com / mevame /

Ответы [ 3 ]

1 голос
/ 25 июля 2012

Вы не получите ошибку аргумента 2025, если вы следуете

//initialization
var container:Sprite = new Sprite();

...... 
......
addChild(container);

//------- later
if(contains(container))
  removeChild(container);

Нет необходимости создавать имя, это гарантирует, что спрайт или DisplayObject будет добавлен в DisplayList. Тогда вы не получите ArgumentError 2025.

0 голосов
/ 20 сентября 2010

Вероятно, это связано с тем фактом, что при анимации временной шкалы любой данный ключевой кадр может содержать объект, однако при каждом списке действий с ключевыми кадрами вы теряете область видимости содержимого предыдущего ключевого кадра.Поэтому, если вы вызовете метод удаления дочерних элементов до того, как пересечете новый ключевой кадр временной шкалы, вы, вероятно, сможете успешно вызвать removeChild для контейнера.

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

0 голосов
/ 20 сентября 2010

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

var container:Sprite = new Sprite();
container.name = "container";

//------- later
var child:DisplayObject = getChildByName("container");
removeChild(child);

Если вам нужно удалить всех детей, вы также можете сделать это

while( this.numChildrem > 0 )
     this.removeChildAt(0);
...