SpriteKit避免两个节点之间发生冲突

问题描述 投票:1回答:2

期望的行为

enter image description here

  • [红色节点(玩家手臂)通过固定接头连接到蓝色节点。
  • 红色节点具有physicsBody,因为:1)如果蓝色节点确实会移动它,并且2)它应该与世界其他地方发生碰撞但没有]蓝色的形状
  • 反之亦然:蓝色节点(玩家身体)应与世界其他地方碰撞-但显然不是
  • 与红色节点碰撞。

    问题

节点和关节设置良好(请参见左图,但physicsBody确实可以相互交互(右):

enter image description here

[请注意:为了获得正确的关节,我必须在红色形状(玩家手臂)上添加一个子节点(圆圈)。因此,我们在这里讨论的总共是三个节点。

最近尝试

[尝试了一堆东西。在Apples’ documentationthis thread之后,我了解到可以通过正确组合categoryBitMaskcollisionBitMask来解决。

BitMasks:

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

...但这不能解决问题。

现在已经连续三天挣扎了。我知道这种问题已经被问过无数次了,但是没有一个引导着我走向正确的方向。非常感谢任何建议!

期望的行为红色节点(玩家手臂)通过固定接头连接到蓝色节点。红色节点具有PhysicalBody,因为:1)如果蓝色节点存在,它应该移动; 2)它应该碰撞...

swift sprite-kit skspritenode skphysicsbody skscene
2个回答
0
投票

这是来自Apple文档:collisionBitMask(但对于Scenekit,也许在Spritekit中是相同的)


0
投票

结果是我为红色形状解开了错误的physicsBody,因此代码更改影响了错误的节点🤦

© www.soinside.com 2019 - 2024. All rights reserved.