【发布时间】:2020-05-24 08:18:03
【问题描述】:
期望的行为
- 红色节点(玩家手臂)通过固定关节连接到蓝色节点。
- 红色节点有一个
physicsBody,因为:1) 如果蓝色节点移动,它应该移动,2) 它应该与世界其他地方发生碰撞但不与蓝色形状李> - 反之亦然:蓝色节点(玩家身体)应该与世界其他地方发生碰撞 - 但显然不是与红色节点。
问题
节点和关节设置良好(见左),但physicsBody 确实相互交互(右):
请注意:为了获得正确的关节,我必须向红色形状(玩家手臂)添加一个子节点(圆形)。所以我们在这里总共讨论三个节点。
最近的尝试
尝试了很多东西。在Apples’ documentation 和this thread 之后,我了解到这可以通过categoryBitMask 和collisionBitMask 的正确组合来解决。
位掩码:
struct Category {
static let none: UInt32 = 0
static let all: UInt32 = UInt32.max
static let playerBody: UInt32 = 0b1 // 1
static let playerArm: UInt32 = 0b10 // 2
static let regularObject: UInt32 = 0b100 // 4
}
????蓝色形状:
body.categoryBitMask = Category.playerBody
body.collisionBitMask = Category.all
????红色形状(以及它的关节子节点):
body.categoryBitMask = Category.playerArm
body.collisionBitMask = Category.none
...但这并没有解决问题。
现在连续三天挣扎。我知道这类问题已经被问了很多次,但没有一个能引导我走向正确的方向。非常感谢任何建议!
【问题讨论】:
-
只是我为这个可能令人困惑的主题编写的一些指南:我的碰撞和接触分步指南:stackoverflow.com/a/51041474/1430420 以及碰撞和接触测试位掩码指南:stackoverflow.com/a/40596890/1430420 操作位掩码来关闭和打开单独的碰撞和接触。 stackoverflow.com/a/46495864/1430420
标签: swift sprite-kit skspritenode skphysicsbody skscene