2013-03-27 2 views
0

Во-первых, я кратко объясню:AS # 3 Массив не очищает содержимое

У меня 2 Массивы, первый массив: держатель, второй массив: Клипы. Первым массивом были динамические пустые ячейки в виде сетки через цикл, нажимая каждый элемент в массив и добавляя на сцену // только для местоположений x, y

Второй массив: Клипы динамически загружаются SWF-фильмы, 10 всех вместе Эти загруженная SWF клипов «AddChild» в держателе Array, так что эти клипы будут в сетке и в то же время проталкиваются в Clips массива, для справки, например

 Clips[1].x = 50 ; // this works fine 

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

 var len:int = Clips.length; 
     for(var i:int = 0; i < len; i++) { 
     this.removeChild(Clips[i]) ;   
     } 

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

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

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

ответ

2

Чтобы предотвратить ошибки, изменить свое состояние:

if(this.contains(Clips[i]){ 
    this.removeChild(Clips[i]); 
} 

Если это все еще не работает, вы можете извлекать из неправильного клипа, то есть не «это» - попробуйте это:

if(Clips[i] != null && Clips[i].parent != null){ 
     Clips[i].parent.removeChild(Clips[i]); 
    } 

(Clips[i] != null части условия добавлена ​​для проверки ошибок появляющегося в комментариях ниже)

Это проверяет, имеет ли клип родительский указатель (если он есть, он находится внутри другого клипа) и удаляет его из этого клипа, а не только «это».

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

var clips:Vector.<DisplayObject> = new Vector.<DisplayObject>(); 

, а не:

var clips:Array = []; 

Помимо крупногабаритной декларации выше, эти функции так же, как массив в большинстве отношений (функции, такие как толчок, сращивание, опорные элементы с квадратными обозначениями, например clips[0] и т. д.), но будет onl y пусть вы помещаете в него определенные типы объектов/переменных - в этом случае DisplayObject. Если вы попытаетесь установить там «int», это не позволит вам - он также работает намного быстрее!Их стоит использовать в любом случае, но здесь они могут помочь на всякий случай, если вы положили что-то еще в этот массив, не понимая (я делал это много раз).

Надеюсь, это поможет!

+0

Я обычно не использую Capitals, как раз для примера. Я попробую ваш метод и вернусь к вам, спасибо – joshua

+0

А, ок, дайте мне знать, как вы справляетесь с этим. Я немного изменил последнее предложение, так как ему не нужна первая часть условия, надеюсь, что вы заметите вовремя (только быстрая смена, если вы этого не сделаете!) – MickMalone1983

+0

на правой странице это моя ошибка, что когда-либо я об этом говорю «Детский параметр должен быть не нулевым» или не может быть дочерним по отношению к родительскому объекту. Я понимаю, что они означают, если я предполагаю, что там хранятся в другом месте – joshua

1

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

 var len:int = Clips.length; 
     for(var i:int = 0; i < len; i++) { 
     Clips[i].parent.removeChild(Clips[i]);   
     } 
+0

Я думал, что, возможно, дублировал его дважды, но когда я прослеживаю массив, он показывает только 8 объектов и 1 символ – joshua

+0

Что происходит с вышеуказанным фрагментом кода? Если код загрузки дважды вызывается, ваш массив будет отображать 8 объектов, поскольку он перезаписывает старый массив. Проблема тогда в том, что старый контент массива не является сборкой мусора, поскольку он все еще имеет ссылку (так как swfs добавляются на сцену). Попробуйте поместить инструкцию trace в блок кода, который выполняет загрузку. – Allan

+0

Что такое массив SLOTS? Вам нужно удалиться от него. – Allan

Смежные вопросы