微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

未在SKScene中调用对象的Keydown

如何解决未在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 举报,一经查实,本站将立刻删除。