Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как добавить слушатель события KeyboardEvent (http://www.flasher.ru/forum/showthread.php?t=183324)

pall92 18.08.2012 08:33

как добавить слушатель события KeyboardEvent
 
Код AS3:

package  {
 
        import flash.display.MovieClip;
        import flash.events.KeyboardEvent;
        import flash.events.Event;
 
        import flash.display.Sprite;
        import flash.events.MouseEvent;
 
        public class GS_MAIN extends MovieClip {
 
                public function GS_MAIN() {
                        // constructor code
 
                        addEventListener(KeyboardEvent.KEY_DOWN, keyIsDown)
 
                }
                function keyIsDown(e:KeyboardEvent)
                {
                        trace("SDG");
                }
        }
 
}

я не понимаю, что я упустил, но этот код не работает. причем аналогичный метод - отлавливает события мыши. столько раз уже делал подобные вещи и всегда работало. во всех уроках делают так же....

что может быть не так???

fish_r 18.08.2012 09:19

Проблема в том, что чтобы ваш мувик перехватывал события клавиатуры он должен быть в фокусе. Попробуйте кликнуть на нем мышью, а затем нажимайте клавиши.

Чтобы приложение вообще перехватывало события клавиатуры слушатель нужно вешать на сцену ( конечно приложение должно быть в фокусе, т.е. до этого пользователь должен кликнуть в области окна приложения).

примерно так:

Код AS3:

...
  this.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyIsDown);
...

В момент назначения слушателя объект ( этот ваш мувик ) должен находиться на сцене, т.е. его свойство stage не должно быть равным null.

*Код у вас очень неряшливый

pall92 18.08.2012 10:38

1 - можно подробнее о stage?. что-то не очень могу разобраться, как обратиться к этому объекту. правильно ли я понимаю, что к стейдж можно обратиться из основного класса через this.stage? надо ли что-то импортировать ( у меня не получалось обращаться к stage методом stage.addEventListener...)

2 - В момент назначения слушателя объект ( этот ваш мувик ) должен находиться на сцене.
это означает, что нужно добавлять слушатель после события added to stage?

3 - есть ли возможность программно добавить мувик в фокус?

4 - что нереляшливого в моем коде?)?

fish_r 18.08.2012 11:51

Цитата:

Сообщение от pall92 (Сообщение 1092718)
1 - можно подробнее о stage?. что-то не очень могу разобраться, как обратиться к этому объекту. правильно ли я понимаю, что к стейдж можно обратиться из основного класса через this.stage? надо ли что-то импортировать ( у меня не получалось обращаться к stage методом stage.addEventListener...)
2 - В момент назначения слушателя объект ( этот ваш мувик ) должен находиться на сцене.
это означает, что нужно добавлять слушатель после события added to stage?

Да. Мыслите в верном направлении. Stage - это гл.контейнер приложения в который добавляются все остальные виз.объекты которые в данный момент отображаются. К нему нельзя обратиться прямо, только
через объект добавленный на сцену, типа myMovieClip.stage, this.stage и пр. И только после добавления
этого объекта в список отображения ( когда он на сцене, виден в окне приложения). Импорты никакие не нужны.

Цитата:

Сообщение от pall92 (Сообщение 1092718)
3 - есть ли возможность программно добавить мувик в фокус?

Нет. Такой возможности нет.

Цитата:

Сообщение от pall92 (Сообщение 1092718)
4 - что нереляшливого в моем коде?)?

Мелочи, где то откр. скобка на той же строке, где то снесена - код должен быть единообразным, иначе самому читать будет трудно. Где то команда не завершена ";", метод не возвращающий результат должен быть обозначен ":void" . Здесь просто затрудняет чтение, а в некоторых языках такой подход вообще не даст скомпилировать приложение....

pall92 18.08.2012 12:42

спасибо большое, за информативный ответ)

samana 18.08.2012 12:55

3. Фокус на объект можно добавить программно.
Код AS3:

stage.focus=SomeClip;


Wolsh 18.08.2012 13:41

Цитата:

3. Фокус на объект можно добавить программно.
Но это всё-равно бессмысленно, так как понятие фокуса временное, и всё-равно требует ссылку на стейдж. Вобщем, к решению данной проблемы не относится. Это нужно для как раз изменения слушающего клавиатуру объекта. Когда такое нужно.
Цитата:

Цитата:

4 - что нереляшливого в моем коде?)?

+ название класса. Заглавными (капсом) именуются только константы. Классы именуются кэмелом, начиная с заглавной.

samana 18.08.2012 14:21

Wolsh, конечно, я просто ответил на вопрос про фокус и объект. Ведь выше сказали, что это невозможно и я решил поправить эту информацию, чтобы топикстартер был в курсе, вдруг пригодится когда нибудь.

Wolsh 18.08.2012 14:49

samana, так и я не к Вам придираюсь, а говорю что это не решение для топикстартера, по той причине что он спросил о программном назначении фокуса как о решении проблемы. Если прозвучало иначе, извините.


Часовой пояс GMT +4, время: 02:24.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.