Sprite kit 关闭精灵之间的检测

Sprite kit 关闭精灵之间的检测,sprite-kit,Sprite Kit,在我的spritekit游戏中,我有两个身体在碰撞,我很难让它们停下来 我把他们的物理代码贴在下面。 问题是当蜂群碰到我的硬币时,它会推它,不确定为什么,因为据我所知,我的敌人被告知只与玩家接触,我的硬币被告知只与墙和玩家接触(如果我错了,请纠正我) (注:我注释掉了硬币的碰撞位掩码,因为当我不使用时,我的硬币会从墙上掉下来) 谢谢 第一精灵 enemy = [SKSpriteNode spriteNodeWithImageNamed:@"Swarm"]; enemy.physicsBod

在我的spritekit游戏中,我有两个身体在碰撞,我很难让它们停下来

我把他们的物理代码贴在下面。 问题是当蜂群碰到我的硬币时,它会推它,不确定为什么,因为据我所知,我的敌人被告知只与玩家接触,我的硬币被告知只与墙和玩家接触(如果我错了,请纠正我)

(注:我注释掉了硬币的碰撞位掩码,因为当我不使用时,我的硬币会从墙上掉下来)

谢谢

第一精灵

   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;

您需要将collisionBitMask显式设置为0

enemy.physicsBody.collisionBitMask = 0;
根据

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

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


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

但我仍然希望我的硬币与我的玩家以及我的敌人发生碰撞。你知道碰撞位掩码和contactTestBitmask之间的区别吗?碰撞位掩码防止两个物理体相互重叠,而,contactTestBitMask指定了需要调用contact委托的类别。@aksashg是的,我只是混淆了collion和contact。