SpriteKit 对象不会相互碰撞

时间:2021-02-14 20:44:47

标签: sprite-kit

我正在处理我的第一个 SpriteKit 项目,但在使碰撞起作用时遇到了问题。对象只是相互穿过。我认为只需要设置类别、碰撞和接触位掩码就可以了。我像这样定义我的两个对象:

final class Paddle: SKShapeNode {
    init(isLeft: Bool) {
        super.init()

        ...

        path = CGPath(rect: rect, transform: nil)

        let body = SKPhysicsBody(rectangleOf: rect.size)
        body.category(.paddle, collidesWith: .ball, isDynamic: false)

        physicsBody = body
    }
}

final class Ball: SKShapeNode {
    override init() {
        super.init()

        ...

        let rect = CGRect(x: 0, y: 0, width: radius * 2, height: radius * 2)
        path = CGPath(ellipseIn: rect, transform: nil)
     
        let body = SKPhysicsBody(circleOfRadius: radius)
        body.category(.ball, collidesWith: .paddle)
        body.linearDamping = 0
        body.angularDamping = 0
        body.restitution = 1.0

        physicsBody = body
    }
}

然后我添加了一个辅助扩展来设置常见的物理体属性:

extension SKPhysicsBody {
    func category(_ category: ShapeType, collidesWith: ShapeType, isDynamic: Bool = true) {
        categoryBitMask = category.rawValue
        collisionBitMask = collidesWith.rawValue
        contactTestBitMask = collidesWith.rawValue
        fieldBitMask = 0
        allowsRotation = false
        affectedByGravity = false
        friction = 0
        restitution = 0
        self.isDynamic = isDynamic
    }
}

0 个答案:

没有答案