![]() |
Как объяснить двойное срабатывание события (MouseEvent) ?
Есть главный класс, который отвечает за добавление и удаление дополнительных классов, таких как класс реализацией процесса игры, и класс с выбором уровней. Все просто, но есть одна проблема.
В выборе уровня кликаю по символу (в котором же присобачен слушатель MouseEvent.MOUSE_CLICK, потом этот символ диспатчит событие "CLICK_ME") а в классе выбора уровня его слушатель, который удаляет класс с выбором уровня и добавляет класс с самой игрой , после нажатия и перехода на класс с игрой , слушатели нажатия клавиш перестают отвечать, для этого нужно кликнуть по экрану , в итоге флэха отвечает на нажатия клавиш и все работает хорошо, перейдя в выбор уровней, а потом в игру, снова нужно кликнуть по экрану. Почему так происходит? В чем проблема? При этом если в символе событие MouseEvent.MOUSE_WHEEL, то в игре также нужно поводить мышкой чтобы заработало. НО если я при переходе в саму игру НЕ УДАЛЯЮ класс с выбором уровней, то все работает нормально. Почему, что меняется в этот раз меняется ? Не удаляются обработчик события клика? Я уже думал, что это из-за параметра события useCapture , но нет. Примеры: Класс с выбором уровня: Код AS3:
Код AS3:
Как быть? Заранее спасибо! Добавлено через 2 часа 36 минут Может кто сталкивался, подскажите, что не так |
Код AS3:
Код AS3:
|
Проблема в коде, особенно в классе Model который принимает стейдж в конструкторе.
|
Цитата:
По твоему этого не должно быть? |
По моему - почитайте, что такое модель прежде чем писать ересь. Код ужасен, нечитабелен и бредов. Неудивительно , что ничего нормально не работает.
Я удивляюсь современным игроделам, правда, чтоли все так на соплях держится? |
события мыши (клик, даун, ап и т.д) срабатывают лишь на том объекте, на который вы повешали слушателя, если слушателя вешаете на кнопку, а потом ее удаляете, то куда бы вы дальше не кликнули событие не сработает, аналогично с меню, каким образом оно должно работать если вы удалили меню? создали новый экран, на него и вешайте новое событие клика, удалили экран, удалили подписку на событие, опять создали , опять подписались. и Вообще - да код ужасен, советую не использовать MVC, пока не поймете как работают все классы, которые вы используете.
|
Цитата:
И сдается мне, никто из нас не писал чего-либо по всем правилам и канонам с первого раза. В общем, нельзя так. |
Цитата:
Уже представляю, как ты вечерами хвастаешься друзьям, что всю ночь провозился с моделью ... @Автор, тащить в DisplayObject stage – дурная затея. У них stage уже есть, надо только дождаться, когда он станет доступен (событие ADDED_TO_STAGE). Проблема же сидит в такой штуке, как в фокусе. Чтобы проще понять – представь страницу с 2 текстовыми полями. При нажатии клавиш печататься символы будут в то поле, в котором есть фокус. Соответственно, при сих манипуляциях фокус теряется и события перестают выстреливать. Решение: вешать клавиши на stage. У неё всегда есть фокус. |
Цитата:
На счет фокуса ты прав, спасибо, в этом то и была проблема. Да, если вешать клавиши на stage, то все работает, но в игре будет, уйма различных кнопок, а на сколько я помню, как утверждал Volsh на стейдж лучше ничего не размещать. Вот я и думаю, а не лучше ли будет просто изменять фокус, - stage.focus = нужный элемент; или все таки это будет не правильно, или предоставлять какие то проблемы? Вообщем, что лучше? |
Нет, подписываться на stage – вполне нормальная тема. У тебя есть ссылка на какой-то объект, так почему бы не послушать, что он там вещает?
Плохая затея что-то со stage делать – например, класть туда детей (addChild), или менять не знаю, прозрачность? ) Скорее всего об этом и говорил Wolsh. По хорошему, вообщем-то, вынести всю клавиатурную логику в отдельное место, в отдельный класс, который будет вещать уже всем желающим о клавиатуре. Клавиатура у пользователя одна, так что вполне уместно сделать класс полностью из статичных полей – и ссылок тянуть не надо. Почему это по хорошему? Ну, скажем, в будущем обнаружится, что если кнопку давить – то события начинают спамиться о том что кнопку быстро-быстро нажимают. Обычно этот эффект нежелателен, и в случае с отдельным классом вставить фикс придется только в этом одном месте. |
| Часовой пояс GMT +4, время: 15:27. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.