![]() |
|
||||||||||
|
|||||
|
Регистрация: May 2013
Сообщений: 8
|
Читаю К.Мука "ActionScript 3.0 для Flash. Подробное руководство".
Но паралельно с виртуальным зоопарком решил делать свое жуткое подобие игры. Дошел до обработки событий. И такое дело: При клике по отрисованому обьекту событие проходит (trace работает), а при нажатии клавиш (в моем случае я взял клавишу вниз) - нет. Подскажите пожалуйста, где косяк. 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"); } } } |
|
|||||
|
Lorem ipsum
|
Темы с названиями "помогите …", "нужна помощь!!!" и подобными закрываются по причине, описанной в пункте 6 правил форума.
А вот события клавиатуры лучше слушать не на каком-либо объекте, а на stage — он всегда в фокусе (если само приложение в фокусе). 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! |
|
|||||
|
Регистрация: May 2013
Сообщений: 8
|
Спасибо, но вы пишете "лучше использовать" - это означает, что мой код неверен в принципе?
|
|
|||||
|
Регистрация: Apr 2013
Сообщений: 77
|
Можете просто определить свойство
Примерно вот так:
Попробуйте включить tabEnabled своему герою и переключать фокус через Tab, должно помочь. |
|
|||||
|
Lorem ipsum
|
Верен ли способ, оценивают по результатам. Твой код ведь не дал ожидаемого эффекта? Причина в том, что объект может посылать события клавиатуры, только когда он в фокусе. Единственный объект, который всегда получает (хотя бы всплывающие) события клавиатуры (в частности) — stage. Вот почему самой популярной практикой является прослушивание клавиатуры именно на нем.
__________________
Поймай яблоко 2! |
|
|||||
|
Регистрация: May 2013
Сообщений: 8
|
Спасибо большое. Буду читать далее. Судя по тому, что я уже на ~250 странице обратился к вам, то я еще зайду))
|
|
|||||
|
Lorem ipsum
|
Заходи, разбирайся, спрашивай ) для того форум и существует.
__________________
Поймай яблоко 2! |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:18. |
|
|
« Предыдущая тема | Следующая тема » |
|
|