Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.08.2009, 22:45
il phoenix вне форума Посмотреть профиль Отправить личное сообщение для il phoenix Найти все сообщения от il phoenix
  № 1  
Ответить с цитированием
il phoenix

Регистрация: Apr 2009
Сообщений: 77
По умолчанию contains vs. parent

oParent - это DisplayObjectContainer
oChild - это DisplayObject

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

Старый 19.08.2009, 23:06
FlashRabbit вне форума Посмотреть профиль Отправить личное сообщение для FlashRabbit Найти все сообщения от FlashRabbit
  № 2  
Ответить с цитированием
FlashRabbit
 
Аватар для FlashRabbit

Регистрация: Jul 2009
Сообщений: 93
Код AS3:
oParent.contains(oChild) //есть ли в oParent oChild ?
oChild.parent == oParent // родитель oChild равен oParent?
Это немного разные вещи, но в любом случае oParent.contains(oChild) быстрее.

Старый 19.08.2009, 23:45
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 3  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
Цитата:
любом случае oParent.contains(oChild) быстрее
почему так категорично? наоборот
скорее всего в методе contains идет цикл по всем содержащимся объектам, и если объект найден возвращается true.
oChild.parent == oParent - это обычное сравнение
__________________
я могу стать всем, если только захочу

Старый 20.08.2009, 08:28
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
contains рекурсивный.

Старый 20.08.2009, 10:31
il phoenix вне форума Посмотреть профиль Отправить личное сообщение для il phoenix Найти все сообщения от il phoenix
  № 5  
Ответить с цитированием
il phoenix

Регистрация: Apr 2009
Сообщений: 77
Цитата:
contains рекурсивный.
а, теперь понял в чем отличие между этими способами.
Но так и не понял почему contains быстрее?
Если он рекурсивный то он вообще должен быть очень медленным по сравнению oChild.parent == oParent


Последний раз редактировалось il phoenix; 20.08.2009 в 10:34.
Старый 20.08.2009, 10:46
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Он нативный потому что.

Старый 20.08.2009, 13:26
il phoenix вне форума Посмотреть профиль Отправить личное сообщение для il phoenix Найти все сообщения от il phoenix
  № 7  
Ответить с цитированием
il phoenix

Регистрация: Apr 2009
Сообщений: 77
Все ясно, спасибо)

Старый 20.08.2009, 15:22
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 8  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
а если там сто тыщ миллионов объектов вложеных. он тоже быстрее будет? просто если он рекурсивный, значит зависимость логарифмическая, а у parent - линейная. значит при определенных условиях он обгонит contains.

хотя, это я так, мысли вслух.
__________________
я могу стать всем, если только захочу

Старый 20.08.2009, 17:19
FlashRabbit вне форума Посмотреть профиль Отправить личное сообщение для FlashRabbit Найти все сообщения от FlashRabbit
  № 9  
Ответить с цитированием
FlashRabbit
 
Аватар для FlashRabbit

Регистрация: Jul 2009
Сообщений: 93
Пора закончить спор.

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();

Старый 20.08.2009, 17:20
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 10  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
а никто не догадался, что contains писали не идиоты, и что там скорее всего точно такой же линейный алгоритм? по крайней мере, когда я писал дерево данных, у меня даже в мозгу ничего не передёрнулось, что бы сделать по другому.

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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