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



我正在创建一个射击游戏,我正在用一个针对敌方弹丸的节点拍摄弹丸。当弹丸同时与两个敌方节点接触时,接触代表被称为两次。我希望能够知道弹丸接触的节点有多少个节点,以便给玩家获得2倍的奖励。

任何人都可以提出一种干净有效的方法来实现这一目标吗?

如果您的奖金是针对2个同时联系人的奖金,请查看可以调用物理机体的清洁和性感的-(NSArray *)allContactedBodies实例方法。它返回了当前与之接触的所有其他物理机构的数组。只需记住适当设置联系人位。

也许您可以将#hits存储在属性和方法的踢中,该方法检查了初始命中x x秒后的命中次数?

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

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

添加了一个称为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中,我覆盖了remove fromparent方法

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

最新更新