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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.10.2010, 21:15
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 11  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
можно "забыть" удалить экземпляр из статик массива, когда объект станет ненужным
Так ведь можно и со сцены забыть его удалить =) Выше предложена реализация (ADDED_TO_STAGE, REMOVED_FROM_STAGE) при которой забыть не получится. В данном случае солидарен со всеми, кто за статичый массив
__________________
...вселенская грусть

Старый 16.10.2010, 21:38
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 12  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Не вижу смысла отягощать дополнительными функциями класс, заморачиваться на слушание событий типа ADDED_TO_STAGE / REMOVED_FROM_STAGE. Хранить это все еще где-то. Когда задача поставлена предельно просто и ясно: перебрать все объекты на сцене определенного класса. Зачем вот надо придумывать лишнее, когда конкретно в данном случае можно обойтись одной-единственной функцией. А для гибкости, можно класс динамически подсовывать:
Код AS3:
function getChildrenOfClass( container:DisplayObjectContainer, classToMatch:Class ):Array
{
	if( !container || !classToMatch )
		return null;
 
	var outInstances:Array = [];
	var d:DisplayObject;
	var i:int = container.numChildren;
	while( i-- )
	{
		d = container.getChildAt( i );
 
		if( d is classToMatch )
			outInstances.push( d );
	}
 
	return outInstances;
}
Пример юзания:
Код AS3:
var shapes:Array/**Shape*/ = getChildrenOfClass( root as DisplayObjectContainer, Shape );
(Код не компилил, мог пропустить какую-нибудь мелкую ошибку).

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


Последний раз редактировалось i.o.; 16.10.2010 в 21:57.
Старый 16.10.2010, 21:40
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 13  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
@i.o.:

а если объекты искомого класса находятся внутри другого объекта находящегося на сцене, предлагаете рекурсивно бегать по всем DisplayObjectContainer'ам?
__________________
Блог, Twitter
Брюзга.

Старый 16.10.2010, 21:45
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 14  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
mayakwd, а что у вас на сцене тысячи объектов валяются, что это может сказаться на переборе, даже рекурсивном? Если да, то постом выше сказано:
Цитата:
Автор не ставил задачу "максимально быстро", где возможно было бы оправдано пихать лишний функционал в кастомные классы.
В таком варианте - я ничего не имею против, если от этого есть реальная выгода.

Старый 16.10.2010, 21:58
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 15  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
@i.o.:

я считаю что код должен быть продуктивным, и, что не стоит делать частных решений.
__________________
Блог, Twitter
Брюзга.

Старый 16.10.2010, 21:59
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 16  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
i.o., не было задачи "перебрать все элементы", была задача "выбрать нужные". А ваш вариант хоть и имеет правл на жизнь, но вданном контексте ИМХО менее "ООПшный", мы же не gc пишем.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 16.10.2010, 22:01
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 17  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Вот статик массив, как раз, есть частное решение. То что я предложил - общее.

TanaTiX
Если вам платят за количествно набранных строк и за "только ООПшный код", а не за здравый взгляд на мир вещей, то я понимаю ваше несогласие.


Последний раз редактировалось i.o.; 16.10.2010 в 22:05.
Старый 16.10.2010, 22:13
andrew911 вне форума Посмотреть профиль Отправить личное сообщение для andrew911 Найти все сообщения от andrew911
  № 18  
Ответить с цитированием
andrew911

Регистрация: Mar 2007
Сообщений: 545
Цитата:
Сообщение от mayakwd Посмотреть сообщение
@i.o.:

я считаю что код должен быть продуктивным, и, что не стоит делать частных решений.
ИМХО для продуктвиности как раз и делаются частные решения ))
Так как условия и цели в разных случаях могут различаться, не бывает универсального кода.

Старый 16.10.2010, 22:19
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 19  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
Цитата:
Сообщение от andrew911 Посмотреть сообщение
ИМХО для продуктвиности как раз и делаются частные решения ))
Так как условия и цели в разных случаях могут различаться, не бывает универсального кода.
пожалуй я не буду спорить.
вырвать из контекста можно что угодно )
__________________
Блог, Twitter
Брюзга.

Старый 16.10.2010, 22:27
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 20  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
я считаю что код должен быть продуктивным
Ну вот вы меня прям-таки вынудили сделать тесты для своего непродуктивного кода.. Честно говоря ожидал хуже.
В упрощенном виде тест такой:
Код AS3:
//{ filling
 
var myContainer:Sprite = new Sprite();
 
i = -1;
while( ++i < 100*1000 )
	myContainer.addChild( new Shape() );
 
i = -1;
while( ++i < 100*1000 )
	myContainer.addChild( new Sprite() );
 
//} filling
 
 
var tm01:int = getTimer();
 
result = getChildrenOfClass( myContainer, Shape );
 
tm01 = getTimer() - tm01;
 
// tm01: 35ms
Как мы видим, провал в 35мс появляется только при переборе и проверке 200'000 (двухсот тысяч) детей в контейнере.
Как же непродуктивно!...


Последний раз редактировалось i.o.; 16.10.2010 в 22:39.
Создать новую тему Ответ Часовой пояс GMT +4, время: 08:56.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
обращение , отображение , экземпляры
Опции темы
Опции просмотра

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

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


 


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


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