我正在使用Flex/AS3编写Flash应用程序,但似乎无法分配键盘焦点。开发早期我就意识到这个问题,并添加了一个带有“现在播放”按钮的启动屏幕,以吸引用户点击。然而,用户必须再次单击应用程序才能使键盘起作用!
更糟糕的是,我有一个游戏内快捷键,可以返回主菜单。如果您返回主菜单,然后再次单击“现在播放”按钮,则SWF会再次失去焦点!
我可能弄错了子对象或意外销毁了捕获键盘焦点的对象,但我不太确定它是如何工作的。你能帮我指明正确的方向吗?
我的应用程序是一个单一的.SWF文件,我直接在浏览器中运行它(尽管最终我会通过网页调用它)。这里是相关的文件: http://www.space-squid.com/game/Main.swf 当您单击“Normal”时,必须再次单击才能实际抓取键盘焦点。:( 随时提问!
编辑:这是我正在使用的一些代码。
如果空精灵引起了问题:
在所有这些例子中,只要我第二次点击,我的键盘钩子就能正常工作,但从来没有第一次。:( 第二次编辑: 我已经缩小了问题范围。也许有人可以帮我解决这个问题,这可能是一个结构问题:
正如您所看到的,我创建了“现在播放”按钮 - 然后似乎它成为了焦点对象。由于背景正在寻找焦点,因此我的键盘事件无法被捕获。不确定这是否有意义,希望有人能够帮助我解决这个问题!
如果我注释掉那一行(removeChild(PlayNowButton)),游戏就可以完美地运行并保持键盘焦点 - 缺点是屏幕上会永远有一个“播放”按钮。
老实说,我甚至不确定游戏本身是否在第一次单击时接收到焦点,但我不知道如何测试。
更糟糕的是,我有一个游戏内快捷键,可以返回主菜单。如果您返回主菜单,然后再次单击“现在播放”按钮,则SWF会再次失去焦点!
我可能弄错了子对象或意外销毁了捕获键盘焦点的对象,但我不太确定它是如何工作的。你能帮我指明正确的方向吗?
我的应用程序是一个单一的.SWF文件,我直接在浏览器中运行它(尽管最终我会通过网页调用它)。这里是相关的文件: http://www.space-squid.com/game/Main.swf 当您单击“Normal”时,必须再次单击才能实际抓取键盘焦点。:( 随时提问!
编辑:这是我正在使用的一些代码。
我主要类中执行的一些最初的代码:
empty_sprite = new Sprite();
addChild(empty_sprite);
empty_sprite.stage.addEventListener(keyboard hooks...);
我也尝试过这种情况,以防我应该在我的根对象上设置钩子:
this.stage.addEventListener(keyboard hooks...);
如果空精灵引起了问题:
background_image = new BackgroundImage();
background_image.x = etc etc alignment data;
addChild(background_image);
background_image.stage.addEventListener(keyboard hooks...)
在所有这些例子中,只要我第二次点击,我的键盘钩子就能正常工作,但从来没有第一次。:( 第二次编辑: 我已经缩小了问题范围。也许有人可以帮我解决这个问题,这可能是一个结构问题:
public function Main {
Some stuff...
empty_sprite = new Sprite(); // Create a new stage sprite
addChild(empty_sprite);
empty_sprite.stage.addEventListener(keyboard hooks...);
addChild(BackgroundImage); // I lay down my background image which is persistant
addChild(PlayNowButton); // I display my PlayNow button to the screen
More stuff...
}
public function StartGame() {
removeChild(PlayNowButton); // This is the point of failure; this removes focus.
removeChild(otherMenuOptions);
...
addChild(gameComponents);
}
正如您所看到的,我创建了“现在播放”按钮 - 然后似乎它成为了焦点对象。由于背景正在寻找焦点,因此我的键盘事件无法被捕获。不确定这是否有意义,希望有人能够帮助我解决这个问题!
如果我注释掉那一行(removeChild(PlayNowButton)),游戏就可以完美地运行并保持键盘焦点 - 缺点是屏幕上会永远有一个“播放”按钮。
老实说,我甚至不确定游戏本身是否在第一次单击时接收到焦点,但我不知道如何测试。