使物理机构对领域有所反应,但不对其他物理机构做出响应

时间:2015-11-26 16:22:51

标签: ios swift sprite-kit swift2

在我的游戏中,我有一个飞过屏幕的身体,并且应该受到我创建的径向重力场的影响。要做到这一点,我需要转动

body.dynamic = false    

但这会导致身体与屏幕上的其他物体(物理体)发生碰撞,而我只是希望它受到场的影响,而不是受这些物体的影响。如果我转动

 body.physicsBody = SKPhysicsBody(rectangleOfSize: rectangle)
    body.physicsBody?.dynamic = true
    body.physicsBody?.categoryBitMask = PhysicsCategory.body
    body.physicsBody?.contactTestBitMask = PhysicsCategory.otherBody
    body.physicsBody?.affectedByGravity = false
    body.physicsBody?.fieldBitMask = PhysicsCategory.shield
    body.physicsBody?.allowsRotation = false

然后它不会受到该领域的影响。 我该怎么做才能使身体保持在路径上?

编辑这是我的代码,用于在已创建节点后飞过屏幕的主体

{{1}}

图像显示了我希望身体避免与物体碰撞的两种可能方式。要么它可以通过它,要么它可以绕过它并返回到更早的路径。我该怎么做?

The two possible paths

1 个答案:

答案 0 :(得分:1)

你应该设置

body.physicsBody?.collisionBitMask = 0

collisionBitMask - 一个掩码,用于定义哪些类别的物理实体可以与此物理实体发生碰撞。 如果未设置值,则PhysicsBody会与其他PhysicsBodies发生冲突,如果值设置为0,则PhysicsBody不会与其他PhysicsBodies发生冲突

我设置collisionBitMask = 0您的body节点将遍历所有其他节点,如果您想要碰撞,则需要设置节点physicsBody?.collisionBitMask(例如,如果您将节点设置为仅与球和墙碰撞physicsBody?.collisionBitMask = kCategoryWall | kCategoryBall

我希望这是有帮助的