1

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

例如,考虑以下 3 个节点:
- Object
- Object_Hole
- Player

因此,一个包含玩家(橙色圆圈)和对象(蓝色矩形)的场景:

在此处输入图像描述

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

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

在此处输入图像描述

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

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

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

谢谢!

4

2 回答 2

1

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

如果您希望您的球与物体碰撞,而不是物体上的某个孔,您可能希望将您的物体分成两部分,中间有一个实际的孔。将孔精灵的categoryBitMask和设置collisionBitMask为与物体和球的完全不同。

// 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;
于 2013-11-29T18:39:54.323 回答
0

将蓝色条创建为 2 个单独的对象,当“洞”不在附近但有一个“洞-预设孔时,它们之间的大小间隙。

于 2018-03-14T11:18:17.307 回答