![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 17
|
Доброго времени суток.
Появился такой вопрос при создании игрушки (использую FlashPunk, если что): как по-человечески реализовать вызов функции одного класса на действие другого? К примеру есть у нас мир, внутри него создается наш персонаж и при нажатии на клавишу должна создаваться пуля. (Далее аналогично каждый новый объект должен будет обращаться к экземпляру xmlsocket чтобы отправить инфоормацию и принять) Мой вариант с созданием пули: package { import flash.events.Event; import net.flashpunk.World; public class Earth extends World { public var hero:Hero; public function Earth() { hero=new Hero; hero.SD.addEventListener(ShotDispatcher.SHOT, shotListener); add(hero); add(new Tile); } public function shotListener(e:Event):void { add(new Bullet(hero.x, hero.y, hero.getAngle())); } } } package { import flash.events.*; import net.flashpunk.Entity; import net.flashpunk.FP; import net.flashpunk.graphics.Image; import net.flashpunk.masks.Hitbox; import net.flashpunk.utils.Input; import net.flashpunk.utils.Key; public class Hero extends Entity { [Embed(source='image/tank1.png')] private const PLAYER:Class; public var movearrow:String=""; public var SD:ShotDispatcher; public function Hero() { graphic=new Image(PLAYER); Image(graphic).centerOrigin(); x=35; y=35; layer=20; setHitbox(31, 31, 0, 0); type="player"; SD=new ShotDispatcher(); } override public function update():void { if (Input.pressed(Key.SPACE)) { SD.doit(); } } } } |
|
|||||
|
Я делал так:
у меня есть контроллер игрока, контроллер игры, есть класс пули и игрока. Контроллер игрока обрабатывает нажатия и передвигает игрока. Но для пуль он диспатчит событие Я_ВЫСТРЕЛИЛ, оно баблится до стейджа, перехватывается в контроллере игры (там я подписываюсь на это событие у стейджа). Контроллер игры уже создает пулю, размещает ее, помещает в массив/достает из пула. И есть общий цикл игры, где через for each прогоняются необходимые массивы (пули и враги) и у каждого вызывается метод move(), двигающий все и вся. Затем в том же цикле проверяются столкновения, пересчитываются сектора и прочее.
__________________
тут я |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Вызов функции другого класса осуществляется с помощью оператора "точка". Шониясно?
http://livedocs.adobe.com/flash/9.0/...ators.html#dot Берёте экземпляр класса, пишете точку, пишете имя метода, пишете скобочки. Не можете передать экземпляр класса? Можно тупо метод передать как переменную типа Function и её вызывать без точки даже, коллбэк называется. Сейчас у вас вполне всё нормально, но как же вызвать метод другого класса знать тоже не мешает.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 17
|
КорДум, спасибо за способ
![]() -De-, да с точкой то все ясно, просто мне поставила по началу в тупик ситуация, когда существуют 2 экземпляра класса в 3ем, и один вызывает метод второго. Но спасибо за коллбэки, погуглил, нашел статью - разобрался в общем с данной ситуацией! |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|