iOS碰撞检测

时间:2018-01-08 14:28:56

标签: ios swift sprite-kit

我已经尝试过尝试让碰撞检测以我需要的方式工作,但无济于事。我想要完成的是当角色接触一个物体但不阻止它移动到物体时得到通知。在GameScene中,我有像这样设置对象的物理:

Category Mask: 8
Collision Mask: 0
Field Mask: 0
Contact Mask: 0

我在代码中将角​​色添加到场景中。我有这样的类别结构:

struct PhysicsCategory {
    static let None: UInt32 = 0
    static let Player: UInt32 = 0b1 // 1
    static let Pillar:UInt32 = 0b10// 2
    static let Chest:UInt32 = 0b100// 4
    static let Ladder:UInt32 = 0b1000
}

角色物理是这样的:

 playerWalk.physicsBody?.categoryBitMask=PhysicsCategory.Player
 playerWalk.physicsBody?.collisionBitMask=PhysicsCategory.Pillar
 playerWalk.physicsBody?.contactTestBitMask=PhysicsCategory.Chest | PhysicsCategory.Ladder

 playerWalk.physicsBody = SKPhysicsBody(rectangleOf:
        playerWalk.frame.size)

由于某种原因,角色在梯子上停下而不是在它上面移动。我无法弄清楚我做错了什么。

1 个答案:

答案 0 :(得分:0)

编辑 - 您已经实际创建了playerWalk.physicsBody之前设置了playerWalk物理主体的属性。因此,categoryBitMaskcollisionBitMaskcontactTestBitMask的值不会设置,因为您已使用可选链接,因此playerWalk.physicsBody?已解析为{{1并且没有设置任何东西。

然后,当你创建nil物理实体时,它只有默认属性,即没有类别,没有接触并与所有东西碰撞,所以它与你的梯子碰撞,因此无法移动它。

移动线:

playerWalk

到您设置物理主体属性的行之前。