【问题标题】:ActionScript 3 KeyboardEvent not firingActionScript 3 KeyboardEvent 未触发
【发布时间】:2010-11-04 19:21:30
【问题描述】:

我是 ActionScript 开发的新手,正在使用 FlashDevelop IDE。我一直在玩一些非常简单的事情,但遇到了一个我似乎无法解决的问题。

我的应用程序编译并运行,监视点击事件的函数完美触发,当我将它传递给 trace() 时,我可以在控制台中看到该事件,但监视 KeyboardEvent 的相同代码根本无法触发。

这是我的代码:

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 永远不会触发,无论我按什么键。有什么想法吗?

【问题讨论】:

    标签: flash actionscript-3 flashdevelop


    【解决方案1】:

    您需要将监听器添加到舞台:

    private function init(e:Event = null):void
    {
        removeEventListener(Event.ADDED_TO_STAGE,init);
    
        stage.addEventListener(MouseEvent.CLICK, onClickEvent);
        stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownEvent);
    }
    

    【讨论】:

    • 我原来有过,但没用。因为我真的不知道舞台对象是什么,所以我把它拿出来,因为 CLICK 事件继续起作用,我认为它类似于浏览器中的顶级窗口对象。无论哪种方式,即使使用 stage.addEventListener() 它仍然无法正常工作,尽管奇怪的是 CLICK 事件继续起作用。我很混乱。 ://
    • 好吧,我不知道发生了什么,但是当我今天编译我的代码时,它起作用了。即使我向上帝发誓我什么也没改变。也许 FlashDevelop 是一个有缺陷的 IDE?谁知道。无论哪种方式,现在它确实有效,我能够验证 KeyboardEvents 需要在舞台对象上调用 addEventListener,但 MouseEvents 不需要。不知道为什么,但还是很高兴知道。感谢您的帮助。
    【解决方案2】:

    您可能需要确保监听事件的影片剪辑具有焦点。如果您的游戏有某种菜单或开始屏幕,您可以单击按钮开始游戏,那么即使已将其从舞台上移除,该影片剪辑也可以保持焦点。

    这是一篇很好的文章,更详细地解释了这一点: Keyboard events on stage are not working...?

    【讨论】:

      【解决方案3】:

      如果您在 Flash IDE 中(至少对于 CS4),您还需要在调试 (Ctrl+Shift+Enter) 或测试 (Ctrl+Enter) fla 时禁用键盘快捷键。

      在影片窗口中,选择“控制”->“禁用键盘快捷键”。 这将停止 Flash IDE 接收键盘输入,并允许调试/测试窗口改为。

      【讨论】:

        猜你喜欢
        • 2012-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-14
        • 1970-01-01
        • 2012-03-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多