2013-08-30 3 views
0

Я пытаюсь сделать это, нажав кнопку, используя клавишу «A» на клавиатуре. Я создал два кадра для этой кнопки, но код не работает, хотя ошибки нет.Нажатие кнопки с использованием клавиатуры в AS3

Нужно ли мне что-то вкладывать в мой основной класс? Может ли кто-нибудь помочь исправить это?

package { 

    import flash.display.MovieClip; 
    import flash.events.MouseEvent; 
    import flash.display.Sprite; 
    import flash.display.Stage; 
    import flash.events.Event; 
    import flash.events.KeyboardEvent; 
    import flash.ui.Keyboard; 

    public class controlButton extends MovieClip {  

     public function controlButton() { 
      // constructor code 
      this.addEventListener(KeyboardEvent.KEY_DOWN,clickDown); 
      this.addEventListener(KeyboardEvent.KEY_UP,clickUp); 
     } 

     public function clickDown(event:KeyboardEvent):void{ 

     // if the key is A 
      if(event.charCode == 65){ 
       this.gotoAndStop(2); 
      } 
     } 

     public function clickUp(event:KeyboardEvent):void{ 

     // if the key is A 
      if(event.charCode == 65){ 
       this.gotoAndStop(1); 
      } 
     } 

     public function changelabel(newLabel:String):void{ 

      this.label.text = newLabel; 
     } 
    } 
} 
+1

Как в стороне, вам следует избегать использования фактических кодов символов, так же, как вы могли бы избежать добавления прослушивателя событий для «щелчка». Вместо этого используйте константы класса «Клавиатура». Хотя маловероятно, что коды будут когда-либо изменяться, это делает его будущим доказательством. (поэтому вместо 'event.charCode == 65' использовать' event.charCode == Keyboard.A') –

ответ

3

Ваша кнопка никогда не получит каких-либо KeyboardEvent. Вы должны добавить слушателей событий непосредственно на сцену. Конечно, вам нужно получить ссылку на сцену. В любом случае:

package { 

import flash.display.MovieClip; 
import flash.events.MouseEvent; 
import flash.display.Sprite; 
import flash.display.Stage; 
import flash.events.Event; 
import flash.events.KeyboardEvent; 
import flash.ui.Keyboard; 


public class controlButton extends MovieClip { 


    public function controlButton() { 
     // constructor code 
     addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 
    } 

    private function onAddedToStage (e:Event):void 
    { 
     removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 
        //stage is no longer null here 
     stage.addEventListener(KeyboardEvent.KEY_DOWN,clickDown); 
     stage.addEventListener(KeyboardEvent.KEY_UP,clickUp); 
    } 


    public function clickDown(event:KeyboardEvent):void{ 

    // if the key is A 
     if(event.charCode == 65){ 
      this.gotoAndStop(2); 
     } 


    } 

    public function clickUp(event:KeyboardEvent):void{ 

    // if the key is A 
     if(event.charCode == 65){ 
       this.gotoAndStop(1); 
      } 
    } 



    public function changelabel(newLabel:String):void{ 

     this.label.text = newLabel; 
    } 
} 

} 

Как вы можете видеть, вы должны добавить KeyboardEvent слушателей на сцену сразу после Event.ADDED_TO_STAGE пожаров.

+1

Извините, я абсолютно не знаком с AS3. когда я выполнил ваш код, я столкнулся с ошибкой «доступа к неопределенному свойству onAddedToStage.Когда мне это определить? – user1805430

+0

OMG, извините, я забыл назвать эту функцию. Это было просто приватная функция (e: событие) Теперь частная функция onAddedToStage (е: Event)! я исправил ответ, попробуйте скопировать Pase снова – KumoKairo

+0

Отметили с Спасибо – user1805430

Смежные вопросы