这件事让我苦思冥想了 2 个小时才弄明白。
我决定将它张贴在这里,以帮助其他人不至于拔头发:)。
基本上这个错误是我没有从我的 flash builder 环境中接收键盘事件(同样的错误/问题在 adobe flash cs5 中可见)。我设置了stage.focus = stage,没有用。我添加了其他事件监听器(mouse_down、frame_enter),效果很好,我添加了 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() 方法来注册 KeyboardEvent。然而,与其他对象不同的是,由于键盘没有必要附加到项目中的任何特定对象,因此键盘事件通常注册到阶段。在下面的代码中,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");
}
}
}
关于flash - 键盘事件 as3 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7630620/