关闭精灵之间的检测

时间:2014-06-26 14:04:04

标签: sprite-kit

我的spritekit游戏中有两个植物体正在发生碰撞,我很难让它们停下来。

我在下面发布他们的物理代码。 问题是当群体接触我的硬币时它推动它,不完全确定为什么,因为据我所知,我的敌人被告知只接触玩家而且我的硬币被告知只接触墙壁和玩家(纠正我,如果我错了)

(P.S我注释了用于硬币的collisionBitMask,因为当我不让我的硬币掉进我的墙壁时)

由于

1St sprite

   enemy = [SKSpriteNode spriteNodeWithImageNamed:@"Swarm"];
enemy.physicsBody =
[SKPhysicsBody bodyWithRectangleOfSize:enemy.size];
enemy.physicsBody.dynamic=NO;
enemy.name=@"Eagle";
enemy.physicsBody.categoryBitMask = PCFallersCategory;
     // enemy.physicsBody.collisionBitMask =
   //  PCPlayerCategory;
     enemy.physicsBody.contactTestBitMask = PCPlayerCategory;
      enemy.physicsBody.restitution=0;
      enemy.physicsBody.friction=0;

第二个精灵。

self.name = @"coin";
CGFloat minDiam = MIN(self.size.width, self.size.height);
minDiam = MAX(minDiam-8, 8);

self.physicsBody =
[SKPhysicsBody bodyWithCircleOfRadius:minDiam/2.0];
self.physicsBody.dynamic=YES;
self.physicsBody.restitution =0;
    self.physicsBody.friction = 0;
    self.physicsBody.linearDamping = 0;
    self.physicsBody.categoryBitMask = PCCollectableCategotry;
   //self.physicsBody.collisionBitMask =PCPlayerCategory;
    self.physicsBody.contactTestBitMask = PCPlayerCategory|PCWallCategory;

1 个答案:

答案 0 :(得分:2)

您需要将collisionBitMask显式设置为0。

enemy.physicsBody.collisionBitMask = 0;

根据documentation

  

当两个物理实体相互接触时,可能会发生碰撞。   该身体的碰撞面具与其他身体的类别进行比较   通过执行逻辑AND操作进行掩码。如果结果是   非零值,则此体受碰撞影响。每个身体   独立选择是否想要受到另一方的影响   身体。例如,您可以使用它来避免碰撞计算   这会对身体的速度产生微不足道的变化。

     

默认值为0xFFFFFFFF(设置所有位)。

这意味着默认情况下,SKPhysicsBody配置为与所有对象发生碰撞。