获取 class 谁在 didBegin 中扩展了 SKSpriteNode

Get class who extends SKSpriteNode in didBegin

我有一个名为 Ball 的 class 扩展了 SKSpriteNode class:

import SpriteKit

class Ball: SKSpriteNode {

    var score: Int = 0

    init([...]){
        [...]
    }

    func setScore(score: Int){
        self.score = score;
    }

}

在我的 GameScene 中,我检测到元素上的碰撞:

func didBegin(_ contact: SKPhysicsContact) {
    [...]

    // Here I want to call my function in Ball class, but I can't.
    contact.bodyA.node!.setPoints(2);

    [...]
}

如何从 contact 变量调用 didBegin() 中的 setScore()

谢谢

尝试将 body.node 转换为您的自定义类型。

func didBegin(_ contact: SKPhysicsContact) {
    [...]

    // Try to convert body.node to your custom type
    guard let ball = contact.bodyA.node as? Ball else { return }
    ball.setPoints(2);

    [...]
}

你知道 didBegin 方法可以为同一次碰撞调用两次(这称为幽灵碰撞)吗?

您需要将联系人的 SKNode 转换为您的自定义 Ball。 也不能保证 bodyA 将是您的 Ball 节点,因此您需要兼顾接触 bodyA 和 bodyB。

 if let ballNode = contact.bodyA.node as? Ball ?? contact.bodyB.node as? Ball {
    ballNode.setPoints(2)
  }