Просмотр полной версии : KeyboardEvent
BlooDHounD
28.12.2005, 03:01
Как его обработать нормально?
пока объект лежал на руте, вроде бы как работало. как только закопал его поглубже - всё сломалось и чиниться не хочет.
В общем помогайте :)
Описываю как сейчас:
Есть класс. В нём в конструкторе написано: public function Example()
{
...
this.addEventListener(KeyboardEventType.KEY_DOWN, this.onKeyDown);
}
private function onKeyDown(event:KeyboardEvent):Void
{
trace(event.keyCode);
event.updateAfterEvent();
}Не работает %)
Все события локальные, как сделать его глобальным? Выносить за пределы класса совсем не хочется. Давайте подумаем.
все задают похожие вопросы, и я тоже задаю,
пока не нашел,
единственное пока знаю,
чтобы перехватывать события клавиатуры, спрайт который перехватывает должен быть в фокусе ввода -
staget.focus = this;
а вот как глобально - самому интересно;
помоему решение таится в методе setCapture();
во всяком случае данный метод используется в drag&drop решениях для того чтобы слушать глобальные события мыши, но как импользоваться я пока не понял - дает исключение.
а ларчик просто открывался....
stage.addEventListener(KeyboardEventType.KEY_DOWN, onKeyDown);
BlooDHounD
28.12.2005, 16:46
как им пользоваться я понял с большей части. но вот только этот метод относиться к событиям мыши больше. когда создаёшь листенер там есть параметр useCapture. Так вот можно создать 2 разных события и обрабатываться они будут в разное время.
Посмотри мой тутор у майка в блоге про палитру. я там на курсорах юзал этот самый каптуре.
попробуй сделать без них, и вытащи мышку за границы селектора. событие вызовится. но если стаит каптуре, то событие вызывается только поотпусканию мыши.
Параметр useCapture ведь это лишь слушать capture-фазу... а setCaputure - это слушать все события мыши (и клавиатуры судя по хелпу) независимо от того в какой точки иерарихи спрайтов находимся. Что я не улавливаю связи. Приведи пример. Интересно.
BlooDHounD
28.12.2005, 17:08
ну блин. я же написал где пример смотреть. :)
"лень - двигатель прогресса" - это я понимаю, но затратить 2 минуты чтобы в блог самому зайти ... рррррррррр, а ещё новичков гоняете за лень.
по существу.
возвращаюсь к воспросу. весь прикол в том что stage почему-то доступен только из рута. Если я пытаюсь написать строчку глубже он пишет:
TypeError: Error #1009: null has no properties.
Я конечно всё понимаю .... но так во всех классах у меня. Я сперва писал в контрукторе и понял типа что возможно не видит из-за того что объект не добавлен на сцену. Вынес из конструктора, а фиг. всёравно одно и тоже.
ну блин. я же написал где пример смотреть. :)
"лень - двигатель прогресса" - это я понимаю, но затратить 2 минуты чтобы в блог самому зайти ... рррррррррр, а ещё новичков гоняете за лень.
а вот не правда ваша... я читал пост без указания на пример, вы ее (указание) потом прилепили :D
пример посмотрел,
но.... ничего мне это не дало, видел до этого использование setCaputure() как я понял setCapture() можно вызывать между событиями MOUSE_DOWN и MOUSE_UP, в других случаях дает исключение. Чтото вроде - "у меня уже есть кепчур".
по stage во вложенных - полная непонятность, даже не знаю.... вообще stage судя по описанию - это временно, предполагаю тут пока копать незачем,
из вариантов решения -просто сделать геттер getStage() у рутового спрайта, или метод подписки на событие "глобального" кейбоарда ....
BlooDHounD
28.12.2005, 18:33
да не в гетере дело ... тут иногда доступен а иногда нет. и как определить это самое иногда я не представляю :(
после сеткаптуре, события овер и оут перестают улавливаться ....
думаю тут проблема в инициализации, в конструкторе может быть что нет еще stage, а вот в каком нибудь INIT или ADDED есть,
кстати верно, нужно проверить.
BlooDHounD
28.12.2005, 22:09
да я уже проверил. ADDED срабатывает иногда несколько раз. почему я так и не понял. я думал он сработает на addChild, а REMOVED на removeChild. однако я ошібался.
Проблему решил :) именно тем что докопал. в общем вся цепочка уже должна лежать на стэйдже. до этого он не виден. соответсвенно в контрукоторе это писать бессмысленно, так как в цепочке его явно нету.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.