![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Цитата:
Можно там и массив поместить. И каждый создаваемый экземпляр в конструкторе туда класть, а при удалении - изымать. Не уверен, что сообщество это одобрит, но так делать, конечно, можно. Деструктора как такового в AS3 нет, но многие пишут и я лично для сложных объектов - тоже пишу. Чищу листенеры и битмапы, останавливаю таймеры. Единственная разница - в С++ деструктор вызывался автоматически, а в AS3 деструктор нужно вызвать явно, либо, если это экранный объект, можно повесить его на событие удаления со сцены. Я вызываю явно. |
|
|||||
|
[+1 05.11.12]
Регистрация: Feb 2011
Сообщений: 431
|
Цитата:
public class MyObject { public static var objects:Vector.<MyObject> = new Vector.<MyObject>(); public function MyObject() { objects.push(this); } } public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); for (var i:int = 0; i < 5; i++) var myobj:MyObject = new MyObject(); for (i = 0; i < MyObject.objects.length; i++) { trace(MyObject.objects[i]); } } } } |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Ох, точно не по феншую.
![]() Добавлено через 6 минут Мне все-таки ближе метафора контейнера. Есть класс-контейнер, в нем приватный массив, этот класс имеет методы создания и удаления объектов, при создании объектов они заносятся в массив и добавляются детьми в контейнер, при удалении - удаляются из контейнера и из массива. Такой подход, помимо простоты, позволяет сэкономить на слушателях, поскольку появляется возможность не развешивать слушателей на каждый создаваемый объект, а повесить все слушателей на контейнер. Исчезает головняк с отписыванием объектов от слушателей перед удалением. |
|
|||||
|
Цитата:
Не представляю ситуации, когда это может понадобиться Я обычно делаю статиеский класс, в котором добавляется enterFrame, и уже этому классу передаю экземпляры того, что нужно обновлять по энтер фрейму |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 1,651
|
Почему не по феншую? Что вам не нравится? Очень удобно в некоторых случаях. У меня, например, так расширены все звуки. Когда игра ставится на паузу, вызывается статический метод MySound.pause(), который перебирает статический же массив со всеми звуками и всех их отстанавливает.
__________________
мой пустой блог |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Цитата:
Проще зафейдить и вообще. Но тут скорее дело в другом, на мой взгляд. Сущность должна делать то, что должна, и не должна, что не должна. Звук должен звучать, а саундпроцессор должен регулировать громкость, запускать звуки-музыку и останавливать звуки-музыку. Но - сугубо имхо. Не настаиваю. |
|
|||||
|
Я соглашусь с iflambergом, хоть и не люблю его стиль общения
. Вполне себе вариант. Решает поставленную задачу? Да. можно сразу забацать статический апдейт. Ну и сам вектор заприватить.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
|
Все это создаст офигенную связанность в программе. Да еще и будет непонятно как туда эти объекты попадают. Уже представляю себе весь гемор, который ждет того, кому прийдется потом разбирать этот код. Лучше все-таки сделать класс, которому будет передаваться то, что нужно обновлять покадрово.
Цитата:
|
|
|||||
|
Регистрация: Jan 2009
Сообщений: 1,651
|
2GBee: а в этом-то топике, что не так с моим стилем общения? "Почему не по феншую? Что вам не нравится?" - это что ли? Ну так я тут без всякого сарказма спросил, мне действительно интересно, что думают другие люди по поводу такой конструкции.
2caseyryan: а где связанность? Связанность, это когда у тебя все объекты программы тесно переплелись друг с другом перекрестными ссылками. Или нет? А тут как раз наоборот, совершенно все звуки держатся в одном статическом классе, контроллерам не нужно даже на него ссылку держать. Написал SoundController.pause() - все звуковые каналы остановились, записали позицию звуковой дорожки. Написал SoundContoller.resume() - начали проигрывание с той же позиции. Точно так же, у меня, скажем пишется стратегическая игрушка. Там много объектов на сцене разной природы - частицы, анимированные задники, юниты. Все они у меня реализуют интерфейс IPauseble и при добавлении на сцену добавляют себя в статический PauseController. По destroy() - убирают себя. И это простенькая конструкция позволяет остановить все объекты совершенно разной природы на сцене одной командой и не хранить при этом в контроллере битвы кучу лишних ссылок. А SoundMixer не дает отдельно стопить музыки и звуки. И не позволяет после паузы продолжить звуки с того же места. Меня лично бесит, когда нажимаешь паузу во время какого-нибудь взрыва, потом отжимаешь, и наблюдаешь безвучно нарастающий шар огня. Неестественно.
__________________
мой пустой блог |
![]() |
![]() |
Часовой пояс GMT +4, время: 05:46. |
|
|
« Предыдущая тема | Следующая тема » |
|
|