有什么方法可以让触及的节点不是 SKNode 而是我从 SKSpriteNode 派生的自定义 class

Is there any way to get touched node not as SKNode but my custom class derived from SKSpriteNode

我想检测 GameScene 中的触摸,而不是我的自定义 class(我知道如果我在我的 class 中设置 userInteractionEnabled=true,我可以轻松检测到触摸节点)。但是我有不止一个自定义 classes 所以我需要在 GameScene 中检测触摸。然而,

let location = touch.locationInNode(self)
let touchedNode = nodeAtPoint(location)

这里是 nodeAtPoint returns SKNode 但是我需要我的自定义 class 来执行我的操作。 感谢您的帮助

使用条件转换 (as?) 结合可选绑定 (if let):

let location = touch.locationInNode(self)
if let touchedNode = nodeAtPoint(location) as? MyCustomClass {
    // If we get here, touchedNode is type MyCustomClass
}

如果您有多个 类 需要以不同的方式处理,您可以使用如下 switch 语句:

switch nodeAtPoint(location) {
    case let node as MyCustomClass1:
        // handle node of type MyCustomClass1
    case let node as MyCustomClass2:
        // handle node of type MyCustomClass2
    case let node as MyCustomClass3:
        // handle node of type MyCustomClass3
    default:
        // Nothing to do here
        break
}