Я создал свой собственный класс кнопок (FKButton) в SpriteKit. Я хочу, чтобы в нем было большинство функций, которые мне понадобятся в будущем, поэтому он включает сочетания клавиш, действия, звуки и т. Д. c. Кажется, все работает нормально, кроме функции keyDown(with event: NSEvent)
(кстати, «горячая клавиша» - это клавиша, которая имеет тот же эффект, что и нажатие самой кнопки. Например, нажатие Enter на клавиатуре часто делает то же самое, что и нажатие кнопку на вашем экране). Я установил для acceptsFirstResponder
и isUserInteractionEnabled
значение 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
et c.). Правильные действия происходят, когда я нажимаю кнопку мышью, но по какой-то причине она не реагирует на ввод с клавиатуры. Я не понимаю в чем дело. Я понимаю, что вам тоже может быть трудно, но все советы приветствуются. Спасибо.
Примечание: это не дубликат вопроса, упомянутого в комментариях. Я не поместил свой код в AppDelegate, как это сделал человек в упомянутом сообщении. Таким образом, это не решило эту проблему.