在我弄明白之前,这让我头疼了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");
}
}
}
答案 0 :(得分:3)
使用键盘命令需要收听键盘事件。此过程与在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");
}
}
}
答案 1 :(得分:2)
public function init(stage:Stage):void
ADDED_TO_STAGE is a `listener Event` not a stage instance.
而不是stage:Stage
使用event:Event
。
你需要导入所需的类。
答案 2 :(得分:1)
标记改变的行。你的代码没有编译btw,检查错误日志。
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");
}
}
}