Flash 键盘事件as3不工作

Flash 键盘事件as3不工作,flash,actionscript-3,actionscript,flash-builder,flash-cs5,Flash,Actionscript 3,Actionscript,Flash Builder,Flash Cs5,这件事让我头痛了两个小时才明白过来。 我决定把它贴在这里,以帮助别人不要把头发拔出来:) 基本上,错误在于我没有从FlashBuilder环境中接收到键盘事件(AdobeFlashCS5也存在相同的错误/问题)。我设置了舞台。焦点=舞台,没有帮助。我添加了其他事件监听器(鼠标按下,帧进入),效果很好,我添加了MovieClip儿童并收听关于这些儿童的事件,仍然是同一个问题 package { public class Test extends Sprite { public

这件事让我头痛了两个小时才明白过来。
我决定把它贴在这里,以帮助别人不要把头发拔出来:)

基本上,错误在于我没有从FlashBuilder环境中接收到键盘事件(AdobeFlashCS5也存在相同的错误/问题)。我设置了舞台。焦点=舞台,没有帮助。我添加了其他事件监听器(鼠标按下,帧进入),效果很好,我添加了MovieClip儿童并收听关于这些儿童的事件,仍然是同一个问题

package
{
  public class Test extends Sprite 
  {

    public function Test() 
    {
        this.addEventListener(Event.ADDED_TO_STAGE,init);
    }

    public function init(stage:Stage):void 
    {
        this.removeEventListener(Event.ADDED_TO_STAGE,init);
        stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
        stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
    }


    private function keyPressed(e:KeyboardEvent):void 
    {
        trace("keyPressed");
    }

    private function keyReleased(e:KeyboardEvent):void 
    {
        trace("keyReleased");
    }
  }
}

使用键盘命令需要监听键盘事件。此过程与AS3中监听任何其他事件的过程相同。您需要使用addEventListener()方法向键盘事件注册。但是,与其他对象不同,由于键盘不必附加到项目中的任何特定对象,因此键盘事件通常在阶段注册。在下面的代码中,stage对象注册了一个键盘事件,该事件将在每次按下键盘键时触发

与AS2不同,AS3中的键盘事件不是全局事件。它们被发布到舞台上,并在显示列表中以气泡的形式显示有焦点的任何显示对象。

package
{
import flash.display.*;
import flash.events.*;

  public class Test extends Sprite 
  {
   public function Test() 
   {
     init();
   }

   public function init():void 
   {
      stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
      stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
   }


   private function keyPressed(e:KeyboardEvent):void 
   {
      trace("keyPressed");
   }

   private function keyReleased(e:KeyboardEvent):void 
   {
    trace("keyReleased");
   }
  }
}
因此,不要使用
stage:stage
而使用
event:event


而u需要导入所需的类。

标记了更改的行。顺便说一句,您的代码没有编译,请检查错误日志

package  {

import flash.display.Sprite; /// changed line
import flash.events.Event; /// changed line
import flash.events.KeyboardEvent; /// changed line


public class Test extends Sprite 
{

public function Test() 
{
    this.addEventListener(Event.ADDED_TO_STAGE,init);
    /* i like it this way
    stage ? init(null) : addEventListener(Event.ADDED_TO_STAGE,init);
    */

}

public function init(e:Event):void  /// changed line
{
    this.removeEventListener(Event.ADDED_TO_STAGE,init);
    stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
    stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
}


private function keyPressed(e:KeyboardEvent):void 
{
    trace("keyPressed");
}

private function keyReleased(e:KeyboardEvent):void 
{
    trace("keyReleased");
}
}

}

此代码是否正常工作?此代码不正常工作,正如上面所述。问题是为什么它不起作用。我终于弄明白了,把问题贴在这里让别人回答(或者我最终会自己回答)。根据线索,环境是导致错误的原因。
package  {

import flash.display.Sprite; /// changed line
import flash.events.Event; /// changed line
import flash.events.KeyboardEvent; /// changed line


public class Test extends Sprite 
{

public function Test() 
{
    this.addEventListener(Event.ADDED_TO_STAGE,init);
    /* i like it this way
    stage ? init(null) : addEventListener(Event.ADDED_TO_STAGE,init);
    */

}

public function init(e:Event):void  /// changed line
{
    this.removeEventListener(Event.ADDED_TO_STAGE,init);
    stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
    stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
}


private function keyPressed(e:KeyboardEvent):void 
{
    trace("keyPressed");
}

private function keyReleased(e:KeyboardEvent):void 
{
    trace("keyReleased");
}
}

}