如何解决未在SKScene中调用对象的Keydown
遇到问题时,我正在做一个小游戏。为了解决问题,我做了一个小测试项目。
我有以下课程:
class Sprite: SKSpriteNode {
override var acceptsFirstResponder: Bool { get { return true } }
init() {
super.init(texture: nil,color: .blue,size: CGSize(width: 200,height: 100))
isUserInteractionEnabled = true
}
override func keyDown(with event: NSEvent) {
position.x += 100
print("keydown")
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
我在以下场景中创建此类的实例:
class GameScene: SKScene {
override var acceptsFirstResponder: Bool { get { return true } }
let x = Sprite()
override func didMove(to view: SKView) {
anchorPoint = CGPoint(x: 0.5,y: 0.5)
isUserInteractionEnabled = true
addChild(x)
}
override func keyDown(with event: NSEvent) {
x.position.y += 50
}
}
如您所见,我在两个类中都有一个keyDown
方法。我清楚地看到精灵(GameScene
)向上移动,因此调用了x
中的那个。但是,我的keyDown
类中的Sprite
方法永远不会被调用。我已经在网上搜索了,但我真正发现的唯一答案是必须重写acceptsFirstResponder
并返回true
,但这对我来说没有帮助。有什么建议吗?
解决方法
哦,我...我找到了一个简单的解决方案,我当然不知道我以前怎么没想到。
由于实际上已调用了GameScene
的{{1}}方法,因此我只是从那里调用了sprite的keyDown
方法并传递了参数:
keyDown
它并不需要我覆盖任何变量(我想默认情况下它设置为第一响应者-如果这是错误的,请更正我)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。