Создать экземпляр класса в Pool
Доброго времени суток, возник вопрос, делаю универсальный пул, код ниже
Код AS3:
|
|
Если коротко:
Код AS3:
Код AS3:
Решения: 1. Как в приведённой выше ссылке назначить пулу фабрику объектов (вместо фабрики подойдет просто функция, создающуя объект, или просто класс объекта) 2. А нужна ли вам универсальность? Просто копипастим класс пула и меняем MovieClip на нужный тип. Что? Копипаста не всегда является злом: - С одной стороны - это дублирование двух функций. Но с другой - это строгая типизация и не надо громоздить фабрик. Плюс в этих функцях мало что дублируется - там if один всего - Вы особо и не накопипастите - не будет у вас много пулов. Вы будете заводить пул только когда: а) Объекты часто создаются и часто "уничтожаются" (перестают использоваться) б) Создание экземпляров этих объектов является узким местом в приложении с) Вы можете сказать, когда объект стал ненужным, т.е. знаете в каком месте написать: Код AS3:
|
expl спасибо большое за объяснение
"универсальный" для моего приложения, у меня в пуле будут либо спрайты, либо мувики, соответственно выбрал мувик. Меня интересовала, как из класса в класс переслать мувик и наделать его экземпляров, тем самым получить пул, в который я смогу отправить нужный мувик, пулов мне понадобиться около 5-7, вот и заморочился, так то я быстро сделаю для каждого отдельный пул, но хочется красоты) Добавлено через 1 час 2 минуты Код AS3:
в общем решение нашёл такое, хотя есть вопрос, код до конца не понимаю Код AS3:
|
Цитата:
Код AS3:
Код AS3:
Код AS3:
А объекты вы вызовом pool.vectorPool.pop() забираете? Не, может оно так и надо, но это не совсем пул и я не могу понять, что вам нужно от пула Просто на данный момент ваш класс заменяется следущим кодом: Код AS3:
|
Делать пул мувиков бессмысленно.
MovieClip используется только если он сделан во FlashIDE При динамическом создании через конструктор - всегда создавайте Sprite. кода Код AS3:
Добавлено через 22 минуты Xм. Я кажется понял задачу. API должно быть что-то вроде.. Код AS3:
|
Цитата:
А пулы из тех же FlashIDE-шных MovieClip-ов я видел в логических играх, там это убирало подтормаживание при добавлении/удалении шариков на экране Цитата:
А тут, я так понял, человеку надо сначала вообще разобраться что такое пул и как его использовать. |
Цитата:
только юз конкретных классов со своими заморочками... как-то очистка перед передачей в пул, установкой максимальной длины пула итп. Ну именно для задачи топикстартера можно было бы и регать каждый конкретнотипный мувик в своём конкретном пуле, через общую обёртку. Перед добавлением добавить проверок на то, что он(мувик) остановлен, что у него нет родителя. Что у него нет подписок на события итп |
Мне пришлось использовать мувик, т.к. класс наследуется от мувика, который нарисован и добавлен в библиотеку. По коду у меня организовано думаю так себе, т.к. писал ровно так, как хватало знаний, я не использую *.pop(не понимаю как его использовать в пуле), сделал проще для себя. Объекты живут разное время, но совсем недолго, просто отживший мувик я удаляю со сцены и кидаю ссылку на новый объект в вектор, увеличивая длину вектора, потом удаляю слушатель для мувика, потом ссылку в null, и убираю из вектора ненужный элемент, перевожу индекс на последний элемент добавленный на сцене, что позволяет при вызове не искать свободный мувик, а сразу вывести.
собственно код, написан некрасива, потихоньку исправляюсь, когда пишу новое Код AS3:
Код AS3:
Код AS3:
|
Судя по всему у вас пул используется не для оптимизации, а чтобы хранить список объектов, причём как-то странно
Там есть забирание мувиклипов из буфера и набивание _новых_ мувиклипов в буффер(который зовется пулом почему-то), а так, чтобы повторно использовались удалённые с экрана мувиклипы - не нашёл Как бы оно могло выглядеть вообще БЕЗ пула (логика изменена, т.к. маловато кода для её восстановления, идентификаторы переименованы чисто для себя - у вас слишком суровый стиль кодирования): Код AS3:
Код AS3:
|
Часовой пояс GMT +4, время: 18:01. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.