【问题标题】:Turning off detection between sprites关闭精灵之间的检测
【发布时间】:2014-06-27 03:02:17
【问题描述】:

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

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

(P.S 我注释掉了硬币的碰撞位掩码,因为当我的硬币没有从墙上掉下来时)

谢谢

第一个精灵

   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;

【问题讨论】:

    标签: sprite-kit


    【解决方案1】:

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

    enemy.physicsBody.collisionBitMask = 0;
    

    根据documentation

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

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

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

    【讨论】:

    • 但我仍然希望我的硬币与我的玩家以及我的敌人发生碰撞
    • 你明白collisionBitMask和contactTestBitmask的区别吗?
    • collisionBitMask 防止两个物理体相互重叠,而contactTestBitMask 指定需要调用联系人代理的类别。
    • @aksashg 我愿意,我只是对 collion 和 contact 感到困惑。
    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 2019-02-05
    • 1970-01-01
    相关资源
    最近更新 更多