![]() |
Пользовательские события. Композиция.
Доброго времени суток.
Разрабатываю небольшую игру. Проблема возникла когда реализовывал смерть персонажа. Чтобы оповестить все классы о смерти персонажа решил использовать собственное событие. Поскольку класс персонажа уже расширяет класс Sprite, а реализовывать интерфейс IEventDipatcher не очень хочется (просто не знаю как) решил создать отдельный класс расширяющий EventDispatcher. Внутри этого класса есть открытый метод внутри которого создается новое событие. В классе персонажа создается экземпляр класса унаследованного от EventDispatcher и используя композицию вызывается метод создающий новое событие. Во всех остальных классах также создаются экземпляры класса унаследованного от EventDispatcher и подписываются на это событие. Проблема: событие не срабатывает (слушатели не вызываются), никаких ошибок и исключений нет. Привожу код (код я специально сильно упростил). Класс события: Код AS3:
Код AS3:
Код AS3:
|
Вложений: 1
А ничего, что Sprite уже является EventDispatcher'ом? Нужно в документацию заглядывать хоть время от времени ;)
Всю эту конструкцию можно смело удалять, и слать события прямо из персонажа. п.с. А не работает эта конструкция потому, что там каждый раз новый GameOverEvent создается. То есть для каждоо экземпляра он свой. Естественно они не смогут слушать события других экземпляров. Если нужно, чтобы эта конструкция работала, объект должен быть один и тот же. Допустим, сделанный синглтоном. |
Цитата:
И насчет нескольких экземпляров GameOverEvent. У Мука вычитал следующие (как раз он рассказывает как как сделать пользовательское событие "gameOver"): Цитата:
и всех их подписать на события создаваемые в классе Game (в моем случае GameOverEvent). Я не совсем понимаю что вы имели ввиду под "То есть для каждого экземпляра он свой", под "он" имеется ввиду создаваемое событие в методе gameOverListener()? |
1)Создавать дополнительный EventDispatcher нет необходимости. EventDispatcher входит в цепочку наследования Sprite(caseyryan вам даже скриншот выложил). Т.е., если ваш герой унаследован от Sprite, он сам может спокойно рассылать события
Код AS3:
Код AS3:
Код AS3:
Код AS3:
|
Спасибо разобрался.
|
Цитата:
Код AS3:
Код AS3:
|
| Часовой пояс GMT +4, время: 18:52. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.