Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   contains vs. parent (http://www.flasher.ru/forum/showthread.php?t=128903)

il phoenix 19.08.2009 22:45

contains vs. parent
 
oParent - это DisplayObjectContainer
oChild - это DisplayObject

Что если вместо oParent.contains(oChild) использовать oChild.parent == oParent?
По моему должно быстрее работать или нет?

FlashRabbit 19.08.2009 23:06

Код AS3:

oParent.contains(oChild) //есть ли в oParent oChild ?
oChild.parent == oParent // родитель oChild равен oParent?

Это немного разные вещи, но в любом случае oParent.contains(oChild) быстрее.

Felicast 19.08.2009 23:45

Цитата:

любом случае oParent.contains(oChild) быстрее
почему так категорично? наоборот
скорее всего в методе contains идет цикл по всем содержащимся объектам, и если объект найден возвращается true.
oChild.parent == oParent - это обычное сравнение

etc 20.08.2009 08:28

contains рекурсивный.

il phoenix 20.08.2009 10:31

Цитата:

contains рекурсивный.
а, теперь понял в чем отличие между этими способами.
Но так и не понял почему contains быстрее?
Если он рекурсивный то он вообще должен быть очень медленным по сравнению oChild.parent == oParent

etc 20.08.2009 10:46

Он нативный потому что.

il phoenix 20.08.2009 13:26

Все ясно, спасибо)

Felicast 20.08.2009 15:22

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

хотя, это я так, мысли вслух.

FlashRabbit 20.08.2009 17:19

Пора закончить спор.

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


Код AS3:

import flash.utils.getTimer;
 
var time:Number = getTimer();
 
function runContainsTest():void
{
 
        time = getTimer();
        for(var i:Number=0;i<20000000;i++)
        {
                if(parentMc.contains(childMc)){ }
        }
        trace("ContainsTest: ", (getTimer()-time))//  1530
}
 
function runParentTest():void
{
        time = getTimer();
        for(var i:Number=0;i<20000000;i++)
        {
                if(childMc.parent == parentMc){ }
        }
        trace("ParentTest: ", (getTimer()-time))// 1936
}
 
 
var parentMc:MovieClip = mc;
var childMc:MovieClip = mc.mc2;
runContainsTest();
runParentTest();


BlooDHounD 20.08.2009 17:20

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


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

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