我是ActionScript开发的新手,我正在使用FlashDevelop IDE。我一直在玩一些非常简单的事情,并遇到了一个我似乎无法解决的问题。
我的应用程序编译并运行,并且监视单击事件的函数完全触发,当我将它传递给trace()时,我可以在控制台中看到该事件,但是看着KeyboardEvent的相同代码根本无法触发。 / p>
这是我的代码:
package GameTesting
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.KeyboardEvent;
[Frame(factoryClass="GameTesting.Preloader")]
public class Main extends Sprite
{
public function Main():void
{
if (stage) {
init();
} else {
addEventListener(Event.ADDED_TO_STAGE, init);
}
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE,init);
addEventListener(MouseEvent.CLICK, onClickEvent);
addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownEvent);
}
private function onKeyDownEvent(e:KeyboardEvent):void
{
trace(e);
}
private function onClickEvent(e:MouseEvent):void
{
trace(e);
}
}
}
每次按预期触发MouseEvent trace(),但无论我按什么键,KeyboardEvent都不会触发。有什么想法吗?
答案 0 :(得分:6)
您需要将监听器添加到舞台:
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE,init);
stage.addEventListener(MouseEvent.CLICK, onClickEvent);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownEvent);
}
答案 1 :(得分:3)
您可能需要确保侦听事件的movieclip具有焦点。如果你有一些菜单或你的游戏的开始屏幕,你单击一个按钮开始,即使它已从舞台上删除,该动画片段仍然可以保持焦点。
这是一篇很好的文章,更详细地解释了这一点: Keyboard events on stage are not working...?
答案 2 :(得分:1)
如果您在Flash IDE中(至少对于CS4),则还需要在调试(Ctrl + Shift + Enter)或测试(Ctrl + Enter)fla时禁用键盘快捷键。
在电影窗口中,选择“控制” - >“禁用键盘快捷键”。 这将阻止Flash IDE接收键盘输入,并允许调试/测试窗口。