ios - SpriteKit 物理 : Ignore when on different z plane

标签 ios sprite-kit skphysicsbody sknode

使用 SpriteKit,是否可以让两个节点相互碰撞,但是当引入另一个节点时,物理原理会发生变化吗?

例如,考虑以下 3 个节点:
- 对象
- Object_Hole
- 播放器

因此,包含一个 Player(橙色圆圈)和一个 Object(蓝色矩形)的场景:

enter image description here

在上面的场景中,Player(圆圈)会受到重力影响并与Object(正方形)发生碰撞。我通过使用物理体、类别和碰撞位掩码知道这是如何工作的。

现在,介绍 Object_Hole(绿色方 block ):

enter image description here

在上面的场景中,Object_Hole(绿色方 block )覆盖了 Object(蓝色矩形)——这可以在相同的 z 平面或更高的平面上。

是否可以让 Player(圆)上的 physicsBody 不与 Object_Hole 所在区域的 Object 发生碰撞?

如果有比添加覆盖节点更好的方法来实现此目的,请告诉我。否则,可能吗?

谢谢!

最佳答案

您可以考虑使用 categoryBitMaskcollisionBitMask: https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKPhysicsBody_Ref/Reference/Reference.html#//apple_ref/occ/instp/SKPhysicsBody/collisionBitMask

如果你想让你的球与物体碰撞,而不是物体上的某个洞,你可能想把你的物体分成两 block ,中间有一个实际的洞。将洞 Sprite 的 categoryBitMaskcollisionBitMask 设置为与物体和球的完全不同。

// sprite1 and sprite2 will never collide.
SKSpriteNode *sprite1 = [SKSpriteNode spriteNodeWithColor:[UIColor redColor] size:CGSizeMake(20.0f, 10.0f)];
sprite1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:sprite.size];
sprite1.physicsBody.collisionBitMask = 0xffff0000;
sprite1.physicsBody.categoryBitMask = 0xffff0000;

SKSpriteNode *sprite2 = [SKSpriteNode spriteNodeWithColor:[UIColor blueColor] size:CGSizeMake(20.0f, 10.0f)];
sprite2.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:sprite.size];
sprite2.physicsBody.collisionBitMask = 0x0000ffff;
sprite2.physicsBody.categoryBitMask = 0x0000ffff;

关于ios - SpriteKit 物理 : Ignore when on different z plane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20037309/

相关文章:

ios - 暂时禁用键盘扩展的旋转

c# - Xamarin 中的 Objective-c 绑定(bind)问题

iphone - UITableView 单元格内的 UITextField

swift - Spritekit 坐标系意外定位

swift - 创建相同的脉冲测量

ios - 控制 Sprite 套件中的最大速度

ios - 如何杀死多次点击的 Sprite ?

swift - SKEmitterNode 有问题吗?

Swift Sprite 套件 SKPhyshicsBody

ios - SKSpriteNode 不受自定义 physicsBody 的重力影响