首页 > 解决方案 > 只确定一个联系人 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)))

    }
}} 

当我把球放进桶里时,我有那个输出,因为球有弹跳效果。想在那个函数中写一些逻辑,但我不能,因为有几个联系人。试图在“if”条件下更改 ball.physicsBody?.categoryBitMask 但也没有成功。请帮忙...

标签: swiftsprite-kitskphysicsbody

解决方案


你的球或水桶可以在第一次接触时设置一个标志,你可以检查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)))
        }
    }
}} 

推荐阅读