0

我正在开发一个需要一直全屏锁定的类似信息亭的应用程序(游戏)。我正在使用 as3/flash/AIR。一开始一切都很好,大部分情况下一切正常……但是我无法弄清楚的某个地方正在酝酿一个谜……这就是你的帮助将不胜感激的地方!

我处理这个问题的方法是在应用程序的最开始添加:

stage.addEventListener(KeyboardEvent.KEY_DOWN, playerOnKeyDown);

然后,在我的 playerOnKeyDown 函数上:

function playerOnKeyDown(event:KeyboardEvent):void
{
    if (event.keyCode == Keyboard.ESCAPE)
    {
        event.preventDefault();
        //More code here opening out menus, etc, etc.)
    }
}

所以,所有这些工作都很好,但当然我还需要带上:

stage.focus = stage;

进入派对,否则,当移除对象时 - 如在 removeChild() 中 - 事件触发不会像我想要的那样运行,因为 flash 改变了显示列表中其他地方的焦点。

每次删除“孩子”时,我都会小心地将焦点添加到舞台上,它在任何地方都很好用,除了在整个运行中的一次,就在我从外部加载的 swf 中删除一个对象之后。

我仍然添加这些行,因为它应该可以工作:

removeChild(childFromLoadedSWF);
stage.focus = stage;

除了当我按下任意键时,该事件不会触发我的函数,如果我按下 ESC 键,它会让我退出全屏(它的默认行为),再次完全绕过我的侦听器函数 playerOnKeyDown。

奇怪的是,就在这样做之前,这行:

stage.hasEventListener(KeyboardEvent.KEY_DOWN))

痕迹真实!

焦点在舞台上,听者在,但是当按下 ESC 键时,默认行为是完全忽略我的功能....

这可能是什么原因造成的?

谢谢你!!

4

1 回答 1

0

看起来我只需要删除我拥有的 ENTER_FRAME 侦听器。这对 stage.focus 造成了严重破坏。现在一切都很好!

stage.removeEventListener(Event.ENTER_FRAME, onEnterFrame)

对于希望使用 AS3 为 mac 或 PC 开发桌面游戏(如在 Steam 中)的任何人来说,这很棒。

游戏 Machinarium 肯定做过这样的事情,因为 ESC 键从不会导致这种效果,尽管它是在 flash 中制作的。

于 2013-09-16T02:55:31.083 回答