我正在开发一个需要一直全屏锁定的类似信息亭的应用程序(游戏)。我正在使用 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 键时,默认行为是完全忽略我的功能....
这可能是什么原因造成的?
谢谢你!!