我正在创建一个射击游戏,我在其中从一个节点向敌方射弹射击射弹。当射弹同时与两个敌方节点接触时,接触代表会被调用两次。我希望能够知道弹丸接触了多少个节点,以便为玩家提供 2 倍的奖励。
任何人都可以提出一种干净有效的方法来实现这一目标吗?
我正在创建一个射击游戏,我在其中从一个节点向敌方射弹射击射弹。当射弹同时与两个敌方节点接触时,接触代表会被调用两次。我希望能够知道弹丸接触了多少个节点,以便为玩家提供 2 倍的奖励。
任何人都可以提出一种干净有效的方法来实现这一目标吗?
如果您的奖金是针对 2 个同时联系的,请查看-(NSArray *)allContactedBodies
您可以在您的 PhysicsBody 上调用的干净且听起来很性感的实例方法。它返回它当前接触的所有其他物理实体的数组。请记住适当地设置联系人位掩码。
也许您可以将#hits 存储在一个属性和方法中,以检查初始命中x 秒后的命中数?
换句话说:将命中检测与奖励逻辑分开。
所以,我在评论部分接受了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];
}