繁体   English   中英

如何在 Mac Catalyst 应用程序中收听按键?

[英]How do I listen to key presses in a Mac Catalyst app?

我有一个简单的 iOS 游戏,我正在移植到 Mac。 我希望用户能够使用他们的键盘控制游戏。 没有原生文本输入(如UITextFieldUITextView )。

如何在 Mac Catalyst 应用程序中监听按键事件? 这似乎并不微不足道。

UIKeyCommand不起作用,因为它似乎是为组合而制作的(例如cmd+c )。 我可以创建一个假文本字段,但我正在寻找一种更简洁的方法来做到这一点。 我想听单个字母和数字。

我可以以某种方式集成NSResponder::keyDown(with:)吗?

您可以只覆盖 pressesBegan 方法。 这是我在游戏中用来控制玩家的示例代码。 它使用UIKeyCommand作为特殊命令键,如箭头键和key.character来对特殊字符做出反应。 原始代码来自Apple Catalyst 文档

override func pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?) {

    var didHandleEvent = false
    for press in presses {
        guard let key = press.key else { continue }
        if key.charactersIgnoringModifiers == UIKeyCommand.inputLeftArrow || key.characters == "a" {
            self.moveLeft(self)
            didHandleEvent = true
        } else if key.charactersIgnoringModifiers == UIKeyCommand.inputRightArrow || key.characters == "d" {
            self.moveRight(self)
            didHandleEvent = true
        } else if key.charactersIgnoringModifiers == UIKeyCommand.inputUpArrow || key.characters == "w" {
            self.moveForward(self)
            didHandleEvent = true
        } else if key.charactersIgnoringModifiers == UIKeyCommand.inputDownArrow || key.characters == "s" {
            self.moveBackward(self)
            didHandleEvent = true
        } else if key.characters == "q" {
            self.turnLeft(self)
            didHandleEvent = true
        } else if key.characters == "e" {
            self.turnRight(self)
            didHandleEvent = true
        }
    }

    if didHandleEvent == false {
        // Didn't handle this key press, so pass the event to the next responder.
        super.pressesBegan(presses, with: event)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM