![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
все очень просто.
у автора стоит абсолютно рабочий код dispatchEvent(new Event(Region.CLICK_REG1)), который почему-то не работает. что делает разумный человек? наверное, он проверяет, а приходит ли управление в это место кода - в данном случае, отрабатывает ли метод onClick в классе Region. как он это делает? например, он ставит трейс перед фрагментом кода, который не отрабатывает (что я, собственно, и предложил автору) почему я считаю, что код рабочий? потому что я взял код автора, переименовал метод с неработающим dispatchEvent(new Event(Region.CLICK_REG1)), вызвал его напрямую и все отработало (см. приведенный фрагмент кода) Последний раз редактировалось mikhailk; 26.02.2011 в 19:13. |
|
|||||
|
[+3 18.04.11]
Регистрация: Dec 2010
Сообщений: 342
|
Метод onclick в Регионе срабатывает. В этом проблем нет. Но не вызывается в главном классе.
Я еще раз все переписал и откомпилил. Последний раз редактировалось DZHETIGAPA; 26.02.2011 в 19:48. |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
package { import flash.display.Sprite; import flash.events.Event; 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); // entry point var reg:Region = new Region(); reg.addEventListener(Region.CLICK_REG1, onClick); addChild(reg); } private function onClick(e:Event):void { trace("SOS") } } } package { import flash.display.*; import flash.events.*; public class Region extends MovieClip { public static const CLICK_REG1:String = "clickreg1"; public function Region():void { this.graphics.beginFill(0xff0000); this.graphics.drawRect(100, 100, 200, 200); this.graphics.endFill(); this.addEventListener(MouseEvent.CLICK, onClick); } public function onClick(e:MouseEvent):void { trace("onClick"); dispatchEvent(new Event(Region.CLICK_REG1)) } } } |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 11
|
Тут проблема в следующем. У тебя главный класс создает экземпляр класса Region. В главном классе ты вешаешь обработчик события. Но ты ведь на сцену не добавляешь Region объект. А в Region ты написал, что как только ПО НЕМУ кликнуть, то диспатчится событие. А как же ты по нему кликнешь, если его нету на сцене? ))) раз его нету на сцене, то кликнуть по нему ты не можешь и поэтому продиспатчить событие ты тоже не можешь. Тебе надо либо добавлять его на сцену в главном классе. Либо диспатчить не по клику, а в конструкторе, например.
|
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Если диспатчить в конструкторе, то никогда не получится подписаться на событие до его диспетчеризации.
В конструкторе диспатчить события нельзя!
__________________
Отряд Котовскага |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
можно
![]() если слушать не на объекте, а на его родителе и баблинг поставить но не нужно |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Даже если слушатель на родителе - родитель возникает в момент addChild, что позже конструктора полюбому)
__________________
Отряд Котовскага |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
да, действительно ))
Нет, все-таки можно. Надо событие отправить на статическую переменную Main.instance (как пример) и ее же слушать. Последний раз редактировалось mikhailk; 27.02.2011 в 16:39. |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Давайте закончим с бредом.
Цитата:
правило: В конструкторе диспатчить события нельзя!
__________________
Отряд Котовскага |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 11
|
Cогласен. Не получится. Только если ставить таймер на диспатч, но это все бред ))) Мы говорили почему у него оно не диспатчится. А не диспатчится потому, что кликать не по чему, чтобы задиспатчить.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 12:19. |
|
|
« Предыдущая тема | Следующая тема » |
|
|