【问题标题】:Skipping to next game level in AS3在 AS3 中跳到下一个游戏关卡
【发布时间】:2011-02-10 06:59:26
【问题描述】:

我正在构建一个大约有 20 个关卡的游戏。现在,当我正在考虑尝试使用空格键向游戏添加“跳过”选项时。我有点麻烦,因为按住空格键会多次调用 KeyboardEvent.KEY_DOWN 事件。

当我试图在屏幕上移动我的玩家角色时,上述场景(Keydown 和 keyup)工作得很好。 在我脑海中挥之不去的一个主要问题是“这是不是因为 KeyboardEvent 监听器在更改关卡时会被删除和添加?”

P.S:将跳过选项添加为按钮效果很好,但我真的很想使用空格键以方便使用。

【问题讨论】:

    标签: actionscript-3 event-handling


    【解决方案1】:

    同时监听KeyboardEvent.KEY_UP,并保留一个用作开关的布尔值。如果按下键盘并且布尔值为假,则将布尔值设置为真并继续。然后,当调用 key_up 事件回调时,将布尔值重置为 false。

    【讨论】:

    • 我曾尝试使用这种方法。但正如我在问题中提到的那样,这对我不起作用。我认为因为也许当一个键监听器被删除时,即使没有调用键监听器,它也会在清理时自动调用。我通过使用帧数作为延迟以及空格键按键检查来解决了这个问题。谢谢。
    【解决方案2】:

    这样的东西对你有用吗?

    private function levelInit () : {
      // ...
      stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener);  
      // ...
    }
    
    private function keyDownListener (e : KeyboardEvent) : void {
      if (e.keyCode == Keyboard.SPACE) {
        stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownListener);
        // add stuff to initiate the level skip
      }
    }
    

    您还可以从setTimeout 调用stage.addEventListener 以延迟添加侦听器以提供更多保护。

    【讨论】:

    • 我没有明白你的意思,试图在 keyDownListener 中实现 removeEventListener?
    • 如果6NSString概述的标志方法不起作用,那么这有效地消除了在按住键时重复调用监听器。一旦回到可以/想要处理击键的已知状态,就可以再次添加侦听器。
    • 另一个技巧是在所有键的向下监听器中禁用向下监听器(类似于上面,但在 if 之外),然后在向上监听器中再次添加它。
    【解决方案3】:

    移除函数中的key_down监听器,添加key_up监听器。然后在 key_up 函数中移除该监听器并重新添加 key_down 监听器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-26
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多