ActionScript 3 KeyboardEvent未触发

时间:2010-11-04 19:21:30

标签: flash actionscript-3 flashdevelop

我是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都不会触发。有什么想法吗?

3 个答案:

答案 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接收键盘输入,并允许调试/测试窗口。