如何在SpriteKit中检测碰撞中涉及的节点数量

时间:2014-02-07 09:44:28

标签: objective-c ios7 sprite-kit skphysicsworld

我正在创建一个射击游戏,我从一个针对敌人射弹的节点射击射弹。当射弹同时与两个敌方节点接触时,联系代表被召唤两次。我希望能够知道射弹与之接触的节点数量,以便为玩家提供2倍的奖励。

有人能建议一种干净有效的方法来实现这一目标吗?

3 个答案:

答案 0 :(得分:1)

如果您的奖金是针对2个同时联系的,请查​​看您可以在physicsBody上调用的干净且性感的-(NSArray *)allContactedBodies实例方法。它返回当前与之联系的所有其他物理实体的数组。只需记住正确设置接触位掩码。

答案 1 :(得分:0)

也许你可以将#hits存储在一个属性和kick方法中,以检查初始命中x秒后的命中数?

换句话说:将命中检测与奖励逻辑分开。

答案 2 :(得分:0)

所以,我在评论部分提出了Dobroćudni Tapir的建议。

添加了一个名为hitCount的变量作为子类射弹SKSpriteNode的属性。

@property NSUInteger hitCount;

然后在场景的didBeginContact中

-(void)didBeginContact:(SKPhysicsContact *)contact
{
    SKNode *firstBody;
    SKNode *secondBody;
if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask)
    {
        firstBody = contact.bodyA.node;
        secondBody = contact.bodyB.node;
    }
    else
    {
        firstBody = contact.bodyB.node;
        secondBody = contact.bodyA.node;
    }

    if (firstBody.physicsBody.categoryBitMask == projectileCategory && secondBody.physicsBody.categoryBitMask == delusionCategory)
    {
        //Other logic

        RCCProjectile *projectile = (RCCProjectile*)firstBody;
        projectile.hitcount ++;
        [projectile removeFromParent];
    }
}

然后,最后在projectileNode中,我覆盖了removeFromParent方法

-(void)removeFromParent
{
    if (self.hitcount >= 2)
    {
        [(LevelScene*)self.scene showBonusForProjectile:self];
    }

    [super removeFromParent];
}