![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Коллеги, изучив поиск по данному вопросу, не нашел однозначного решения.
Прошу извинить мои неизящные размышления, я выходец из AS2, переход не дается так просто... Приведу простой пример. Есть некоторый класс Engine, в котором через функцию placeBullet создается экземпляр класса Bullet и добавляется на сцену. И далее, я хочу через Enter Frame двигать этот экземпляр. Важно, что экземпляров одновременно может быть несколько. private function placeBullet (mc:Object) { var bullet:Bullet = new Bullet(); addChild(bullet); bullet.x = mc.x; bullet.y = mc.y; // bullet.addEventListener(Event.ENTER_FRAME, moveBullet); } ... и понимаю, что не могу обратиться напрямую к экземпляру bullet, т.к. он создан внутри функции placeBullet и не виден снаружи. Если же его выносить наружу, то невозможно создать несколько одновременных экземпляров - предыдущий будет удаляться. Т.е. мне бы хотелось иметь возможность сделать что-то похожее на это: И это только пол-беды. Двигать пулю мне бы хотелось в направлении, равном Соответственно, хотелось бы иметь следующую картину: private function placeBullet (mc:Object) { var bullet:Bullet = new Bullet(); addChild(bullet); bullet.x = mc.x; bullet.y = mc.y; // bullet.addEventListener(Event.ENTER_FRAME, moveBullet(bullet, mc.rotation)); } // private function moveBullet(event:Event, mc:Object, angle:Number) { mc.x += speed*Math.cos(angle); mc.y += speed*Math.sin(angle); } |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Массив буллетов.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
при создании пули помещаете ее в массив пуль(или вектор пуль), внутрь пули пишите ее угол поворота и скорость(если она разная), по энтерфрейму пробегаетесь по массиву с пулями, и передевигаете каждую.
|
|
|||||
|
[++]
|
Меняйте своё мышление!!))
Создаёте класс, который будет отвечать за все ваши пули, типа BulletManager, в нём делаете массив (а лучше вектор) ваших объектов - все новосозданные объекты добавляйте туда. Далее... Не вижу, что вам мешает нормально сделать класс Bullet? Прописать всю необходимую логику внутри самого класса Bullet (в т.ч. все листенеры), а не в анонимной функции? При необходимости, можете конструктору класса Bullet передавать ссылку на объект, его создавший (или же на тот мувиклип, где нужно двигать сам буллет). Надеюсь стало яснее)) |
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Спасибо! Массив - это действительно хорошая идея, буду пробовать.
На счет: ... я бы с радостью. Посоветуйте толковое чтиво в контексте грамотного подхода к ООП. Ибо на сегодняшний день я создаю классы без всякой системы, скорее, чтобы попробовать, что это такое и научиться с ними немного работать. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Как-то не попадалось толковых книг именно по абстрагированию, то есть вычленению объектов (классов) в хаосе проектного задания; обычно размышления об этом раскиданы то там то сям, хотя это конечно самая основа ООП, правильно вычленить классы и разделить между ними ответственности. Кое что есть у Роберта Мартина в "Чистом коде", или у Мартина Фаулера в "Рефакторинге", но применительно к AS3 было бы полезно почитать книгу о шаблонах.
Это как раз первая в мире книга по AS3, призванная сразу направить в нужное русло "выходцев из AS2", поэтому ООП там уделено практически все внимание, не столько его "чистоте" как у Мартинов, сколько начальному ООП-мышлению.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Цитата:
|
|
|||||
|
Цитата:
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Регистрация: Mar 2006
Адрес: Odessa
Сообщений: 157
|
Цитата:
__________________
Не всех война убила - многих покалечила |
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Цитата:
Добавлено через 43 секунды Цитата:
Это тоже полезное замечание, чувствовал одним местом, что можно так, но не знал, как именно. Спасибо. |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:33. |
|
|
« Предыдущая тема | Следующая тема » |
|
|