【问题标题】:Why is the keyDown function in Swift not working?为什么 Swift 中的 keyDown 函数不起作用?
【发布时间】:2020-11-04 05:52:27
【问题描述】:

我在 SpriteKit 中创建了自己的按钮类 (FKButton)。我希望它拥有我将来需要的大部分功能,因此它包括快捷键、动作、声音等。除了keyDown(with event: NSEvent) 功能(顺便说一句。“快捷键”是与按下按钮本身具有相同效果的键。例如,在键盘上按下 Enter 通常与按下屏幕上的按钮具有相同的效果)。我将acceptsFirstResponderisUserInteractionEnabled 都设置为true。我为按钮类中的keyDown 函数编写的代码如下所示:

override func keyDown(with event: NSEvent) {
    print("Detected key press: \(event.keyCode).")
    if shortcutKeys.contains(event.keyCode) {
        actionAtClick()
    }
}

该类继承自SKNode,因为我想添加另一个继承自SKScene 的类。这是课程:

class GameScene: SKScene {

    let button = FKButton(size: CGSize(width: 200, height: 100), text: "Button", fontSize: 40)

    override func didMove(to view: SKView) {
    
        button.shortcutKeys = [36,76]
    
        self.addChild(button)
    
    }
}

我刚刚删除了所有不相关的内容(例如 button.fontColor = NSColor.white 等)。当我用鼠标单击按钮时,会发生正确的操作,但由于某种原因,它不响应键盘输入。我不明白出了什么问题。我知道这对您来说也可能很难,但所有提示都值得赞赏。谢谢。

注意:这不是 cmets 中提到的问题的重复。我没有像提到的帖子中的人那样将我的代码放在 AppDelegate 中。因此,它没有解决这个问题。

【问题讨论】:

  • 这能回答你的问题吗? How Can I get keyboard input in a SpriteKit Game?
  • 谢谢,可惜没有。
  • 什么是 FKButton?
  • 快捷键?这是什么?
  • 哦,FKButton 只是类的名称。快捷键是您可以在键盘上按下的键,其作用与按下按钮相同。它通常用于注册表单:通常您可以按 Enter 而不是按实际按钮,但它的作用相同。抱歉不清楚。

标签: swift macos button sprite-kit keydown


【解决方案1】:

上面的答案; SKNode 确实是 NSResponder 的子类。它在 Apple 的控制用户与节点交互的文档中说得非常正确。

【讨论】:

    【解决方案2】:

    - (void)keyDown:(NSEvent *)event;

    是继承自NSResponder类的方法,如果你的FKButton不是NSResponder的继承者,你可以写override func keyDown(with event: NSEvent)无效。

    尝试将相同的方法放在不同的类上,比如NSViewController,它是 NSResponder 的一个实例,确保你有更多的运气。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-19
      • 2018-03-20
      • 2012-05-14
      • 1970-01-01
      • 2014-08-06
      • 2015-02-20
      • 2021-08-20
      • 2021-07-25
      相关资源
      最近更新 更多