使用SpriteKit,是否可能有两个相互碰撞的节点,但是当引入另一个节点时,是否有物理工作的变化?
例如,考虑以下3个节点:
- 对象
- Object_Hole
- 玩家
因此,包含播放器(橙色圆圈)和对象(蓝色矩形)的场景:
在上面的场景中,玩家(圆圈)会受到重力的影响并与对象(方形)发生碰撞。我知道这是如何使用物理体,类别和碰撞位掩码。
现在,介绍Object_Hole(绿色方块):
在上面的场景中,Object_Hole(绿色方块)覆盖了Object(蓝色rect) - 它可以位于同一z平面或更高平面上。
是否可以使Player(circle)上的physicsBody不与Object_Hole所在区域中的Object发生碰撞?
如果有更好的方法来实现这一点,请添加一个覆盖节点,请告诉我。否则,有可能吗?
谢谢!
答案 0 :(得分:1)
您可以考虑使用categoryBitMask
和collisionBitMask
:
https://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;
答案 1 :(得分:0)
将蓝色条创建为2个独立的对象,它们之间的间隙为0个点(如果它们触摸的点导致奇怪的物理反应,甚至会略微重叠)当“洞”不在时,但是当预设孔时,它们之间的“孔大小”间隙。