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

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

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

Регистрация: May 2013
Сообщений: 8
По умолчанию Не приходит событие клавиатуры

Читаю К.Мука "ActionScript 3.0 для Flash. Подробное руководство".
Но паралельно с виртуальным зоопарком решил делать свое жуткое подобие игры. Дошел до обработки событий. И такое дело:
При клике по отрисованому обьекту событие проходит (trace работает), а при нажатии клавиш (в моем случае я взял клавишу вниз) - нет.
Подскажите пожалуйста, где косяк.

Код AS3:
package field 
{
	import flash.display.Sprite;
	import flash.events.*;
 
	public class Hero extends Sprite
	{
		public var heroName:String;
 
		public function Hero(newName:String) 
		{
			this.setName (newName);
			this.addEventListener (KeyboardEvent.KEY_DOWN, downListener);
			this.addEventListener (MouseEvent.CLICK, clickHeroListener);
 
		}
		public function addHero(x:int, y:int):void 
		{
			graphics.lineStyle (1)
			graphics.beginFill (0xCC00FF);
			graphics.drawCircle (x, y, 25);
			graphics.endFill ();
		}
		public function setName (newName:String):void 
		{
			heroName = newName;
		}
 
		public function clickHeroListener(e:MouseEvent):void 
		{
			trace (getName ());
		}
 
		public function getName ():String
		{
			return heroName;
		}
 
		public function downListener(e:KeyboardEvent):void 
		{
			trace ("down");
		}
	}
 
}

Старый 28.05.2013, 13:29
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 2  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Темы с названиями "помогите …", "нужна помощь!!!" и подобными закрываются по причине, описанной в пункте 6 правил форума.

А вот события клавиатуры лучше слушать не на каком-либо объекте, а на stage — он всегда в фокусе (если само приложение в фокусе).

Код AS3:
package field 
{
	import flash.display.Sprite;
	import flash.events.*;
 
	public class Hero extends Sprite
	{
		public var heroName:String;
 
		public function Hero(newName:String) 
		{
			this.setName (newName);
			this.addEventListener (Event.ADDED_TO_STAGE, addedToStageListener);
			this.addEventListener (MouseEvent.CLICK, clickHeroListener);
		}
 
		public function addHero(x:int, y:int):void 
		{
			graphics.lineStyle (1)
			graphics.beginFill (0xCC00FF);
			graphics.drawCircle (x, y, 25);
			graphics.endFill ();
		}
 
		public function setName (newName:String):void 
		{
			heroName = newName;
		}
 
		public function getName ():String
		{
			return heroName;
		}
 
		private function addedToStageListener(event:Event):void
		{
			stage.addEventListener (KeyboardEvent.KEY_DOWN, downListener);
		}
 
		private function clickHeroListener(e:MouseEvent):void 
		{
			trace (getName ());
		}
 
		private function downListener(e:KeyboardEvent):void 
		{
			trace ("down");
		}
	}
 
}
__________________
Поймай яблоко 2!

Старый 28.05.2013, 13:53
XpM вне форума Посмотреть профиль Отправить личное сообщение для XpM Найти все сообщения от XpM
  № 3  
Ответить с цитированием
XpM

Регистрация: May 2013
Сообщений: 8
Спасибо, но вы пишете "лучше использовать" - это означает, что мой код неверен в принципе?

Старый 28.05.2013, 13:59
Idon'tKnow вне форума Посмотреть профиль Отправить личное сообщение для Idon'tKnow Найти все сообщения от Idon'tKnow
  № 4  
Ответить с цитированием
Idon'tKnow

Регистрация: Apr 2013
Сообщений: 77
Можете просто определить свойство
Код AS3:
tabEnabled = true;
Примерно вот так:

Код AS3:
 
            var circle:Sprite = new Sprite();
			circle.graphics.lineStyle(1);
			circle.graphics.drawCircle(50, 50, 50);
			stage.addChild(circle);
			circle.tabEnabled = true;
			circle.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener);
 
private function keyDownListener(e:KeyboardEvent):void 
        {
			trace("down!");
		}
Добавлено через 1 минуту
Попробуйте включить tabEnabled своему герою и переключать фокус через Tab, должно помочь.

Старый 28.05.2013, 14:14
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 5  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от XpM Посмотреть сообщение
Спасибо, но вы пишете "лучше использовать" - это означает, что мой код неверен в принципе?
Верен ли способ, оценивают по результатам. Твой код ведь не дал ожидаемого эффекта? Причина в том, что объект может посылать события клавиатуры, только когда он в фокусе. Единственный объект, который всегда получает (хотя бы всплывающие) события клавиатуры (в частности) — stage. Вот почему самой популярной практикой является прослушивание клавиатуры именно на нем.
__________________
Поймай яблоко 2!

Старый 28.05.2013, 14:50
XpM вне форума Посмотреть профиль Отправить личное сообщение для XpM Найти все сообщения от XpM
  № 6  
Ответить с цитированием
XpM

Регистрация: May 2013
Сообщений: 8
Спасибо большое. Буду читать далее. Судя по тому, что я уже на ~250 странице обратился к вам, то я еще зайду))

Старый 28.05.2013, 14:58
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 7  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Заходи, разбирайся, спрашивай ) для того форум и существует.
__________________
Поймай яблоко 2!

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

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

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


 


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


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