Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.08.2012, 08:33
pall92 вне форума Посмотреть профиль Отправить личное сообщение для pall92 Найти все сообщения от pall92
  № 1  
Ответить с цитированием
pall92

Регистрация: Jul 2012
Сообщений: 66
По умолчанию как добавить слушатель события 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");
		}
	}
 
}
я не понимаю, что я упустил, но этот код не работает. причем аналогичный метод - отлавливает события мыши. столько раз уже делал подобные вещи и всегда работало. во всех уроках делают так же....

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

Старый 18.08.2012, 09:19
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 2  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Проблема в том, что чтобы ваш мувик перехватывал события клавиатуры он должен быть в фокусе. Попробуйте кликнуть на нем мышью, а затем нажимайте клавиши.

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

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

Код AS3:
...
  this.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyIsDown);
...
В момент назначения слушателя объект ( этот ваш мувик ) должен находиться на сцене, т.е. его свойство stage не должно быть равным null.

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

Старый 18.08.2012, 10:38
pall92 вне форума Посмотреть профиль Отправить личное сообщение для pall92 Найти все сообщения от pall92
  № 3  
Ответить с цитированием
pall92

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

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

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

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

Старый 18.08.2012, 11:51
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 4  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Цитата:
Сообщение от pall92 Посмотреть сообщение
1 - можно подробнее о stage?. что-то не очень могу разобраться, как обратиться к этому объекту. правильно ли я понимаю, что к стейдж можно обратиться из основного класса через this.stage? надо ли что-то импортировать ( у меня не получалось обращаться к stage методом stage.addEventListener...)
2 - В момент назначения слушателя объект ( этот ваш мувик ) должен находиться на сцене.
это означает, что нужно добавлять слушатель после события added to stage?
Да. Мыслите в верном направлении. Stage - это гл.контейнер приложения в который добавляются все остальные виз.объекты которые в данный момент отображаются. К нему нельзя обратиться прямо, только
через объект добавленный на сцену, типа myMovieClip.stage, this.stage и пр. И только после добавления
этого объекта в список отображения ( когда он на сцене, виден в окне приложения). Импорты никакие не нужны.

Цитата:
Сообщение от pall92 Посмотреть сообщение
3 - есть ли возможность программно добавить мувик в фокус?
Нет. Такой возможности нет.

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

Старый 18.08.2012, 12:42
pall92 вне форума Посмотреть профиль Отправить личное сообщение для pall92 Найти все сообщения от pall92
  № 5  
Ответить с цитированием
pall92

Регистрация: Jul 2012
Сообщений: 66
спасибо большое, за информативный ответ)

Старый 18.08.2012, 12:55
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 6  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
3. Фокус на объект можно добавить программно.
Код AS3:
stage.focus=SomeClip;

Старый 18.08.2012, 13:41
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 7  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
3. Фокус на объект можно добавить программно.
Но это всё-равно бессмысленно, так как понятие фокуса временное, и всё-равно требует ссылку на стейдж. Вобщем, к решению данной проблемы не относится. Это нужно для как раз изменения слушающего клавиатуру объекта. Когда такое нужно.
Цитата:
Цитата:
4 - что нереляшливого в моем коде?)?
+ название класса. Заглавными (капсом) именуются только константы. Классы именуются кэмелом, начиная с заглавной.
__________________
Reality.getBounds(this);

Старый 18.08.2012, 14:21
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 8  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Wolsh, конечно, я просто ответил на вопрос про фокус и объект. Ведь выше сказали, что это невозможно и я решил поправить эту информацию, чтобы топикстартер был в курсе, вдруг пригодится когда нибудь.


Последний раз редактировалось samana; 18.08.2012 в 14:43.
Старый 18.08.2012, 14:49
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 9  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
samana, так и я не к Вам придираюсь, а говорю что это не решение для топикстартера, по той причине что он спросил о программном назначении фокуса как о решении проблемы. Если прозвучало иначе, извините.
__________________
Reality.getBounds(this);

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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