【发布时间】:2016-06-20 18:33:38
【问题描述】:
我正在使用 SpriteKit 和 Swift 2。我知道有很多教程,但我觉得它们一定已经过时了,否则我会发疯,因为似乎每个人对不同的物理位掩码的作用都有不同的看法。
我只是想让两个物体相互碰撞。这就是我所做的:
var everythingElseCategory: UInt32 = 3
var object1Category: UInt32 = 2
var object2Category: UInt32 = 4
object1.physicsBody?.categoryBitMask = object1;
object1.physicsBody?.collisionBitMask = everythingElseCategory
object2.physicsBody?.categoryBitMask = object2;
object2.physicsBody?.collisionBitMask = everythingElseCategory
everythingElse.physicsBody?.categoryBitMask = everythingElseCategory;
everythingElse.physicsBody?.collisionBitMask = 0 //its a wall
我一定把位掩码的概念搞砸了,因为对我来说,碰撞位掩码就是它所碰撞的东西,但似乎我一定是错的,因为这个解决方案不起作用。 Object2 和 object1 发生碰撞,但是 object1 没有和 object2 发生碰撞!!!?!??!
关于我做错了什么有什么想法吗?
谢谢!
【问题讨论】:
-
关键是 -> 这些是位掩码,以避免不必要的行为,最好以这种方式分配它们 UInt32 = 0x1
-
Apple's SpriteKit physics example 也可能感兴趣。您正在使用整数值,您需要使用二进制。转换这些,你的碰撞类别是
0011,你的object2Category是0100,这意味着它不会碰撞。最简单的方法是使用位移来创建位掩码。 -
查看这篇维基百科文章以更好地了解位掩码的工作原理en.wikipedia.org/wiki/Mask_(computing)
-
@Gliderman 让您的评论成为答案,以便您获得一些代表。
-
@user3351949 修复了所有问题...非常感谢!是的,您应该将其发布为答案^^
标签: ios swift sprite-kit