我正在用键盘让宇宙飞船在屏幕上移动。我设法处理关键事件,但我注意到,当同时保存多个键时,它的行为将不正确,只有一个具有优先级。我使用的是一条switch语句,因为我认为每个键都调用了一次keyDown函数,但即使在这种情况下显式地添加了一个fallthrough函数,效果也不好。有人经历过类似的事情吗?有没有更好的方法可以将键盘用作控制器?

override func keyDown(with event: NSEvent) {

      switch event.keyCode {
      case 0x31:
         if let playerShip = self.playerShip {
            playerShip.run(SKAction.init(named: "Pulse")!, withKey: "fadeInOut")
         }
      case 123:
         if let playerShip = self.playerShip {
            playerShip.run(SKAction.applyAngularImpulse(0.001, duration: 0.1))
         }
      case 124:
         if let playerShip = self.playerShip {
            playerShip.run(SKAction.applyAngularImpulse(-0.001, duration: 0.1))
         }
      case 125:
         if let playerShip = self.playerShip {
            playerShip.run(SKAction.applyImpulse(CGVector.init(angle: playerShip.zRotation).opposite(), duration: 0.1))
         }
      case 126:
         if let playerShip = self.playerShip {
            playerShip.run(SKAction.applyImpulse(CGVector.init(angle: playerShip.zRotation), duration: 0.1))
         }
      default:
         print("keyDown: \(event.characters!) keyCode: \(event.keyCode)")
      }
   }

最佳答案

我的猜测是,即使你的代码完全按照你描述的方式工作,在实践中,任何玩你的游戏的人都很难同时打两个键。一个键几乎总是比另一个键稍快。所以,也许您可以实现它,以便捕获一个关键事件,然后在第一个事件之后(在释放第一个事件之前)的短时间窗口内查找第二个事件。

关于swift - 键盘作为游戏 Controller ,处理Swift中的多个键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42879819/

10-12 06:52