在我的游戏中,我有一个飞过屏幕的身体,并且应该受到我创建的径向重力场的影响。要做到这一点,我需要转动
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}}
图像显示了我希望身体避免与物体碰撞的两种可能方式。要么它可以通过它,要么它可以绕过它并返回到更早的路径。我该怎么做?
答案 0 :(得分:1)
你应该设置
body.physicsBody?.collisionBitMask = 0
collisionBitMask
- 一个掩码,用于定义哪些类别的物理实体可以与此物理实体发生碰撞。 如果未设置值,则PhysicsBody
会与其他PhysicsBodies
发生冲突,如果值设置为0,则PhysicsBody
不会与其他PhysicsBodies
发生冲突
我设置collisionBitMask = 0
您的body
节点将遍历所有其他节点,如果您想要碰撞,则需要设置节点physicsBody?.collisionBitMask
(例如,如果您将节点设置为仅与球和墙碰撞physicsBody?.collisionBitMask = kCategoryWall | kCategoryBall
)
我希望这是有帮助的