当我不想时,SKShapeNode 与我的 SKPhysicsbody 发生碰撞

Posted

技术标签:

【中文标题】当我不想时,SKShapeNode 与我的 SKPhysicsbody 发生碰撞【英文标题】:SKShapeNodes Colliding with my SKPhysics body when I don't want to 【发布时间】:2018-04-30 16:32:32 【问题描述】:

我正在制作一个游戏,其中我有一个创建为 SKSpriteNode 的球,它与一些我不想发生的 PhysicsBodies 发生碰撞。这是我的球:

orangeBall = OrangeBall(path: ballTrajectory, color: UIColor.orange, borderColor: UIColor.black)
    orangeBall.physicsBody = SKPhysicsBody(circleOfRadius: Physics.PhysicsNumbers.ballRadius)
    orangeBall.position = Physics.PhysicsNumbers.ballRestPos
    orangeBall.physicsBody?.categoryBitMask = CollisionsChecker.Ball
    orangeBall.physicsBody?.collisionBitMask = CollisionsChecker.Frame | CollisionsChecker.Box | CollisionsChecker.Score
    orangeBall.physicsBody?.contactTestBitMask = CollisionsChecker.Frame | CollisionsChecker.Box | CollisionsChecker.Score
    orangeBall.physicsBody?.isDynamic = false
    orangeBall.physicsBody?.affectedByGravity = false
    addChild(orangeBall)

我希望它检测到它已经与这个分数物理体接触但实际上没有碰撞:

score = NetBoxes(path: scoreStationary, color: UIColor.red, borderColor: UIColor.red)
    score.position = Physics.PhysicsNumbers.scoreRest
    score.physicsBody = SKPhysicsBody(circleOfRadius: 50)
    score.physicsBody?.categoryBitMask = CollisionsChecker.Score
    score.physicsBody?.contactTestBitMask = 0
    score.physicsBody?.collisionBitMask = CollisionsChecker.Ball
    score.physicsBody?.affectedByGravity = false
    score.physicsBody?.isDynamic = false
    addChild(score)

(circleOfRadius 仅用于测试目的)每次我尝试检查我的碰撞时,它似乎都没有输出我想要它做的事情:

func didBegin(_ contact: SKPhysicsContact)
    let firstBody = contact.bodyA
    let secondBody = contact.bodyB

    if firstBody.categoryBitMask == CollisionsChecker.Ball && secondBody.categoryBitMask == CollisionsChecker.Score || firstBody.categoryBitMask == CollisionsChecker.Score && secondBody.categoryBitMask == CollisionsChecker.Ball
        print("Ball in hoop")
    

本质上,我作为 SKSphapeNode 的 orangeBall 总是与我的 Score PhysicsBody 发生碰撞。也可能是我的球和得分周围的两个物理体都接触到了。我很茫然,任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

我想通了。我稍后在代码中为我的 orangeBall 重新创建了一个物理体。在它周围形成另一个physicsBody,使其与我的其他节点发生碰撞!

【讨论】:

以上是关于当我不想时,SKShapeNode 与我的 SKPhysicsbody 发生碰撞的主要内容,如果未能解决你的问题,请参考以下文章

绕过子类中的Initialization:Swift和SpriteKit

SKShapeNode 检测两条线的交点

SKShapeNode 性能不佳

当我尝试与我的数据库建立连接时出现错误

沿中心旋转 SKShapeNode

使用 SKEffectNode 逐渐模糊 SKShapeNode