|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Mar 2015
Сообщений: 26
|
Пользовательские слушатели событий.
Здравствуйте, есть такой код в инициализации класса "героя":
this.addEventListener(Event.ADDED_TO_STAGE, Added); this.addEventListener(cEvents.INDEX_CHANGE, changed); if (this.hasEventListener(cEvents.INDEX_CHANGE)) trace("have it");//проверка //..... private function changed(e:cEvents):void { this.StageIndex = stage.getChildIndex(this); trace(this.StageIndex, "changed");//опять проверка (не работает. эта функция не вызывается)=( } package utils { import flash.events.EventDispatcher; import flash.events.Event; public class cEvents extends Event { public static var INDEX_CHANGE:String = "INDEX_CHANGE"; public function cEvents(type:String, bubbles:Boolean=false, cancelable:Boolean=false) { trace(type);//проверка на досягаемость этого места super(type, bubbles, cancelable) ; } } } public function swap(e:MouseEvent):void { stage.swapChildrenAt(2, 3);//пока только два dispatchEvent(new cEvents(cEvents.INDEX_CHANGE)); } Спасибо! |
|
|||||
Регистрация: Mar 2015
Сообщений: 26
|
Каких пузырьков, как это сделать и что это даст?
|
|
|||||
Тут два варианта.
1) метод swap(e:MouseEvent) вообще не вызывается, потому что нахоидтся не в классе персонажа 2) Подписан не тот экземпляр, который шлет событие п.с. вот это: Вообще бред. Естественно этот код сработает, если создать новое событие. Это же конструктор. Ровно как и вот эта бессмысленная проверка Конечно же слушатель будет, сразу после того как его добавили |
|
|||||
Регистрация: Mar 2015
Сообщений: 26
|
метод swap находится в Main
Добавлено через 1 минуту метод swap работает, иначе бы не менялось положение в контейнере отображаемых объектов |
|
|||||
Что он там делает? Подписка в этом случае должна происходить не в классе героя, а к классу Main.
Здесь Main шлет событие INDEX_CHANGED. Естественно герой никак не может его услышать. Если предположить, что герой тоже валяется в Main, и называется hero (к примеру). То, чтобы он услышал это событие, нужно сделать так: public function swap(e:MouseEvent):void { stage.swapChildrenAt(2, 3);//пока только два hero.dispatchEvent(new cEvents(cEvents.INDEX_CHANGE)); } Либо, другой вариант. В классе героя должна быть ссылка на Main, и подписка слушателя должна быть прикручена к этой ссылке как-то так Советую почитать в справке как работают события, и погулить тоже. Так же у Колина Мука довольно неплохо описано всё |
|
|||||
Регистрация: Mar 2015
Сообщений: 26
|
именно эта проверка
единственное что показывает что это вообще хоть как-то работает. вызывается каждый раз при нажатии. Добавлено через 2 минуты а в чем тогда смысл этих событий (системы событий). Один раз в теле класса прописал, и генерируй их где надо. Везде где есть нужный импорт, они должны прослушиваться.(?!!) |
|
|||||
Цитата:
Здесь на лицо просто полное непонимание. Еще раз повторю Цитата:
|
|
|||||
Регистрация: Mar 2015
Сообщений: 26
|
Отправить в гугл и я могу. Я два дня ищу решение, и перечитал почти все статьи и мануалы что нашел, в основном на офф сайте адоб. Как они описывали, так я и сделал. Может кто-то еще сможет помочь. Я обращаюсь сюда в крайнем случае.
|
Часовой пояс GMT +4, время: 20:07. |
|
« Предыдущая тема | Следующая тема » |
|
|