敵の発射体をターゲットにして 1 つのノードから発射体を発射するシューティング ゲームを作成しています。発射物が 2 つの敵ノードに同時に接触すると、接触デリゲートが 2 回呼び出されます。プレイヤーに 2 倍のボーナスを与えるために、発射体が接触したノードの数を知りたいです。
これを達成するためのクリーンで効率的な方法を提案できる人はいますか?
敵の発射体をターゲットにして 1 つのノードから発射体を発射するシューティング ゲームを作成しています。発射物が 2 つの敵ノードに同時に接触すると、接触デリゲートが 2 回呼び出されます。プレイヤーに 2 倍のボーナスを与えるために、発射体が接触したノードの数を知りたいです。
これを達成するためのクリーンで効率的な方法を提案できる人はいますか?
#hits をプロパティに保存し、最初のヒットから x 秒後のヒット数をチェックするメソッドをキックすることはできますか?
つまり、ヒット検出をボーナス ロジックから分離します。
そこで、コメント セクションでのDobroćudni Tapirの提案に従いました。
サブクラス化された発射体 SKSpriteNode のプロパティとして、hitCount という変数を追加しました。
@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];
}