SpriteKit Physics:在不同的z平面上忽略

时间:2013-11-17 22:56:40

标签: ios sprite-kit skphysicsbody sknode

使用SpriteKit,是否可能有两个相互碰撞的节点,但是当引入另一个节点时,是否有物理工作的变化?

例如,考虑以下3个节点:
- 对象
- Object_Hole
- 玩家

因此,包含播放器(橙色圆圈)和对象(蓝色矩形)的场景:

enter image description here

在上面的场景中,玩家(圆圈)会受到重力的影响并与对象(方形)发生碰撞。我知道这是如何使用物理体,类别和碰撞位掩码。

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

enter image description here

在上面的场景中,Object_Hole(绿色方块)覆盖了Object(蓝色rect) - 它可以位于同一z平面或更高平面上。

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

如果你想让你的球与物体发生碰撞,而不是物体中的某个洞,你可能想要将你的物体分成两块,中间有一个实际的洞。设置孔精灵的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;

答案 1 :(得分:0)

将蓝色条创建为2个独立的对象,它们之间的间隙为0个点(如果它们触摸的点导致奇怪的物理反应,甚至会略微重叠)当“洞”不在时,但是当预设孔时,它们之间的“孔大小”间隙。