1

我有一个名为Ball的类,它扩展了 SKSpriteNode类:

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);

    [...]
}

如何从联系人变量中调用didBegin()中的setScore() ?

谢谢

4

2 回答 2

1

您需要将联系人的 SKNode 转换为您的自定义 Ball。也不能保证 bodyA 将成为您的 Ball 节点,因此您需要同时满足联系 bodyA 和 bodyB 的需求。

 if let ballNode = contact.bodyA.node as? Ball ?? contact.bodyB.node as? Ball {
    ballNode.setPoints(2)
  }
于 2021-03-21T14:15:03.803 回答
0

尝试将 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 方法可以为同一个碰撞调用两次(这称为幽灵碰撞)吗?

于 2021-03-21T13:32:45.350 回答