确定只有一个接触 SpriteKit

Determine only one contact SpriteKit

主要问题是:如何判断只有一个联系人?

部分代码:

extension GameScene : SKPhysicsContactDelegate {


func didBegin(_ contact: SKPhysicsContact) {
    let bodyA = contact.bodyA.categoryBitMask
    let bodyB = contact.bodyB.categoryBitMask
    let ball = BitmaskCategory.ball
    let bucket = BitmaskCategory.bucket



    if bodyA == ball && bodyB == bucket || bodyA == bucket && bodyB == ball {
        print("contact")
//            block.run(SKAction.repeatForever(blockInstanse.rotateBlock(block: block)))

    }
}} 

当我放ball in bucket, i have that output因为球有弹跳效果。 想在那个函数中写一些逻辑,但我不能,因为有几个联系人。 试图在 "if" 条件下更改 ball.physicsBody?.categoryBitMask 但也没有成功。 请帮忙...

你的球或桶可以在第一次接触时设置一个标志,你可以检查 didBegin 和 运行 动作是否为真,例如:

var isFirstContact = true

func didBegin(_ contact: SKPhysicsContact) {
    let bodyA = contact.bodyA.categoryBitMask
    let bodyB = contact.bodyB.categoryBitMask
    let ball = BitmaskCategory.ball
    let bucket = BitmaskCategory.bucket



    if bodyA == ball && bodyB == bucket || bodyA == bucket && bodyB == ball {
        if isFirstContact {
            isFirstContact = false
            // block.run(SKAction.repeatForever(blockInstanse.rotateBlock(block: block)))
        }
    }
}}