我在flex中做了一个简单的游戏。你控制下降的块,你的目标是消除病毒。它几乎是90年代游戏马里奥博士的副本。我已经做到这一点,所以你用箭头键控制块,你用空间旋转块。一切都很好,就像玩的时候一样。然而,当我切换到另一个程序并且应用程序失焦并且我回到游戏时,每当我按空间时游戏重新开始。它就像调用一个重新初始化游戏并将所有变量重置为起始值的函数。 游戏由几个类似场景的NavigationContent组件组成。当我按空格键时,游戏不会返回到开始屏幕,它只会重置游戏。这真的很奇怪。 是否有任何调用的默认方法会导致此行为?任何人都有线索?
编辑:问题出现 - 似乎 - 只有当我将一个函数绑定到空格键(keyCode 32)时。我通过将键重新绑定到“CTRL”来解决了这个问题。但是仍然很高兴知道SPACE键是什么。如果我使用Internet Explorer,游戏可以正常工作。其他浏览器无法使用空格键。所有这些都是同样的问题。
编辑:这是事件监听器的外观:
this.stage.addEventListener(KeyboardEvent.KEY_DOWN,moveBlocksKeyboardEvent);
即使我注释掉moveBlocksKeyboardEvent方法中的所有代码,游戏仍会重新启动。它只是在击中SPACE键时。如果我按住键,则块旋转。当我释放空间按钮时,游戏重新启动。好像它是一些与KEY_UP事件有关的重新初始化方法。
答案 0 :(得分:0)
这种行为通常与空值或未定义值相关联,导致无意义的代码跳转,从而导致重置。
确保关键字的事件处理程序附加到有效对象;如果您使用“舞台”,请确保它存在。当您移出焦点时,事件处理程序可能与空对象保持关联;当你重新进入时,它不再存在,因此你得到了重置行为。
此主题可能有助于提供更多细节: Adding a key listener in Action Script 3