Форум 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=145685)

mayakwd 16.10.2010 22:30

подобные тесты не дают никаких реальных данных B-)
тем более глубина вложенности у вас равна единице =)

i.o. 16.10.2010 22:35

вам двести тысяч детей о чем-то говорит? Это сделано с учетом того, что в реальности даже во всем древе сцены столько детей никогда не будет. Но даже при такой тяжести все про все отнимает 35 мс. С рекурсивным проходом в два раза медленнее не станет, поверьте.
Можете стоять на своем, мне до этого дела нет.
Вообще, рекоммендую поинтересоваться у автора - ему это для авариума с рыбкой нужно?

passertm 16.10.2010 23:06

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

у меня только один вопрос. почему
Код AS3:

for(var i=0; i<numChildren;i++)
if ( !(getChildAt(i) is MyClass) ) continue;
else{обработать getChildAt(i) }

а не
Код AS3:

for(var i=0; i<numChildren;i++)
if (getChildAt(i) is MyClass ) {
обработать getChildAt(i)
}

))))))

Добавлено через 11 минут
тьфу. я чето только первую страницу прочитал подумал на этом и остановились :))))))
200 тысяч за 35 милли секунд это бычтро. очень даже по моему. не ожидал

Котяра 16.10.2010 23:21

ну вообще я как и tanatix советую помещать объекты в массив при создании, без всяких статиков итп...
типа так:
Код AS3:

var enemy:Enemy = new Enemy();
this.enemyList.push(enemy);

всё. нужны враги - обходим врагов, нужны призы - обходим призы.

f.g.programmer 17.10.2010 00:22

Код AS3:

тьфу. я чето только первую страницу прочитал подумал на этом и остановились

Я тоже :) И мой комментарий оказался очень похож на комментарий gloomyBrain вначале второй страницы.
Это недостаток дизайна. Было бы удобно, если бы под последним комментарием была достаточно заметная кнопка "СЛЕДУЮЩАЯ СТРАНИЦА", если такая есть.

gloomyBrain 17.10.2010 00:54

Задача:
Цитата:

обратиться сразу ко всем экземплярам определенного класса, которые отображены на сцене
Решение i.o.
Цитата:

Пройтись по каждому экземпляру и проверить, является ли он наследником определенного класса, с помощью оператора is
Проверки на соответствие по классу нет в условии задачи и для ее решения проверка так же не требуется. Тем более рекурсивная. Следовательно, это просто лишняя работа.

Добавка от passertm:
Цитата:

большой минус возможность утечьки памяти ведь при удалении обьекта отовсюду на него еще останется ссылка из храниша
Если у объекта есть метод destroy() или у класса есть статический метод removeInstance() (оба метода могут быть private и вызываться по событиям REMOVED_FROM_STAGE), то вопрос снимается автоматически. Говоря про утечки памяти - удаление элемента массива не есть трудоемкая операция, равно как и удаление со сцены. Так что аргумент в расчет не принимается.

Мнение mayakwd:
Цитата:

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

chabapok 17.10.2010 01:17

Вы тут спорите ни о чем. Главное - идея. Идеи подкинули -- дальше пускай топикстартер сам решает что ему нужно.

может ему нужно перебирать эти экземпляры 1 раз при запуске. А может в каждом событии ENTER_FRAME. Требования к оптимизации, естественно разные.

passertm 17.10.2010 10:35

Цитата:

Сообщение от f.g.programmer (Сообщение 943205)
Это недостаток дизайна. Было бы удобно, если бы под последним комментарием была достаточно заметная кнопка "СЛЕДУЮЩАЯ СТРАНИЦА", если такая есть.

да. есть номера страниц. просто они находятся после формы ввода быстрого ответа. вот и получается что сначало отвечаем:)

Добавлено через 25 часов 28 минут
Цитата:

Сообщение от gloomyBrain (Сообщение 943207)
Если у объекта есть метод destroy() или у класса есть статический метод removeInstance() (оба метода могут быть private и вызываться по событиям REMOVED_FROM_STAGE), то вопрос снимается автоматически. Говоря про утечки памяти - удаление элемента массива не есть трудоемкая операция, равно как и удаление со сцены. Так что аргумент в расчет не принимается.

вот в этом и есть беда. в кажужейся простоте реализации. к примеру после такой реализации. обьект может быть добавлен на сцену а потом удален и потом вновь добавлен и вот дела. всеми подобным обьектами на сцене производится действия а с одим нет. убиться можно пока найдешь причину если обьектов больше 1000(т.к. удаление и добавление могло произойти на пол часа до того как что то пойдет не так).

я не пытаюсь показать будто этот метод сложнее чем есть на самом деле. наличие нужных событий очень упрашает дело. но все же есть случаи в которых я бы предпочел делать перебор. ибо игра не стоилобы свечь(реализации этого всего и отладки чтобы убедиться что все идет как надо)

alatar 18.10.2010 13:41

Цитата:

но все же есть случаи в которых я бы предпочел делать перебор.
Перебор будет проще в весьма ограниченном колличестве случаев (когда нужные объекты преобладают над остальными), в остальном такая реализация будет более затратна для ресурсов (представьте, что у вас на сцене есть система чатиц и ваш алгоритм перебора натыкается на нее).
Цитата:

...обьект может быть добавлен на сцену а потом удален и потом вновь добавлен и вот дела...
Это уже будет кривизна конкретной реализации, сам метод (сбор ссылок на экземпляры) предельно прост, накосячить в нем, это надо постараться.

gloomyBrain 18.10.2010 13:43

Цитата:

накосячить в нем, это надо постараться
Вот я тоже так думаю. Там отлаживать-то 3 (ну ладно - 4) строчки кода =)


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

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