Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как с родителя удалить все чилды? (http://www.flasher.ru/forum/showthread.php?t=117611)

vcj 31.10.2008 12:48

Как с родителя удалить все чилды?
 
Subj...

smilenka 31.10.2008 13:11

Как один из вариантов:

Код:

var maxChildIndex:int = graphicContext.numChildren - 1 ;
for( var childIndex:int = maxChildIndex; childIndex >= 0 ; childIndex-- )
{
        graphicContext.removeChildAt( childIndex ) ;
}


etc 31.10.2008 14:33

Код:

var l:uint = super.numChildren;
while (l--) super.removeChildAt(l);


wvxvw 31.10.2008 15:22

Код:

while (numChildren) removeChildAt(0);
:p

etc 31.10.2008 15:43

Цитата:

Сообщение от wvxvw (Сообщение 774066)
Код:

while (numChildren) removeChildAt(0);
:p

Это самый медленный код.

wvxvw 31.10.2008 16:09

Зато самый короткий %)

Волгоградец 31.10.2008 16:17

Почему медленный?
Код:

var s:Sprite = new Sprite();
for (var i:uint = 0; i < 10000; i ++) {
        var h:Sprite = new Sprite();
        s.addChild(h);
}
                       
var t1:Number = getTimer();               
var l:uint = s.numChildren;
while (l--) s.removeChildAt(l);               
var t2:Number = getTimer();               
Debugger.trace(t2 - t1);//1575
                       
//***********************************
                       
var b:Sprite = new Sprite();
for (var j:uint = 0; j < 10000; j ++) {
        var m:Sprite = new Sprite();
        b.addChild(m);
}
                       
var t3:Number = getTimer();               
while (b.numChildren) b.removeChildAt(0);               
var t4:Number = getTimer();
                                       
Debugger.trace(t4 - t3);//761


CrazyFlasher 31.10.2008 17:41

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

BlooDHounD 31.10.2008 21:11

моё представление о мире разрушено. только индусы могли развернуть массив.

etc 31.10.2008 23:18

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

gnus 01.11.2008 00:09

а removeAllChildren() не покатит?
или это только во Flex?

etc 01.11.2008 00:13

В AS3 такого метода нет.

wvxvw 01.11.2008 00:37

Ха, я бы тоже не поверил... даже проверять бы не стал... вобщем О.о

Волгоградец 01.11.2008 10:41

Господа, можете объяснить, почему вы считали код wvxvw более медленным нежели код __etc? Что-то я особой разницы не вижу...

etc 01.11.2008 12:45

Цитата:

Сообщение от Волгоградец (Сообщение 774202)
Господа, можете объяснить, почему вы считали код wvxvw более медленным нежели код __etc? Что-то я особой разницы не вижу...

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

Как выяснилось, в модели DisplayObjectContainer элемент на нулевом индексе оказывается последним в массиве элементов, а не наоборот. Именно поэтому удаление последнего элемента в display list медленнее, чем первого. Ну а геттер numChildren оказался таким же быстрым, как и декремент локальной переменной, вероятно в силу того, что декремент выполяется в несколько действий, с конвертацией и прочим.

Волгоградец 01.11.2008 12:49

Ух ты. Круто и понятно. Спасибо, __etc.

klafuda_klalafu 14.12.2008 14:21

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

etc 14.12.2008 14:27

getChildAt?


Часовой пояс GMT +4, время: 08:16.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.