0

我在 flex 中做了一个简单的游戏。你控制落下的方块,你的目标是消灭病毒。这几乎是 90 年代游戏《马里奥博士》的翻版。我已经做到了,所以你可以用箭头键控制方块,然后用空格旋转方块。播放时一切正常。但是,当我切换到另一个程序并且应用程序失焦并且我回到游戏时,每当我按空格键时,游戏都会重新启动。这就像它调用了一个重新初始化游戏并将所有变量重置为起始值的函数。该游戏由几个类似于场景的 NavigationContent 组件组成。按空格键时游戏不会回到开始屏幕,它只是重置游戏。威奇真的很奇怪。是否有任何被调用的默认方法会导致这种行为?有人有线索吗?

编辑:问题出现 - 看起来 - 只有当我将功能绑定到空格键(keyCode 32)时。我通过将键重新绑定到“CTRL”解决了这个问题。但是仍然很高兴知道 SPACE 键发生了什么。如果我使用 Internet Explorer,该游戏在空间上运行良好。其他浏览器不能使用空格键。所有这些都是同样的问题。

编辑:这是事件侦听器的外观:

this.stage.addEventListener(KeyboardEvent.KEY_DOWN, moveBlocksKeyboardEvent);

即使我注释掉 moveBlocksKeyboardEvent 方法中的所有代码,游戏仍然会重新启动。仅在按空格键时。如果我按住键,块会旋转。当我松开空格键时,游戏重新开始。好像它是一些与 KEY_UP 事件或其他东西相关的重新初始化方法。

4

1 回答 1

0

这种类型的行为通常与空值或未定义值相关联,从而导致无意义的代码跳转,然后导致重置。

确保按键按下的事件处理程序附加到有效对象;如果您使用的是“舞台”,请确保它存在。当您离开焦点时,事件处理程序可能会与空对象关联;当您重新进入时,它不再存在,因此您会得到重置行为。

此线程可能有助于提供更多详细信息: 在 Action Script 3 中添加键侦听器

于 2013-06-09T13:18:55.087 回答