2014-02-07 50 views
0

我正在創建一個射擊遊戲,我正在從一個針對敵方射彈的節點射擊射彈。當炮彈同時與兩個敵方節點接觸時,聯繫人委託會被調用兩次。我希望能夠知道彈丸已經接觸到多少個節點,以便給玩家兩倍獎金。如何檢測SpriteKit中碰撞中涉及的節點數量

有人可以建議一個乾淨和有效的方式來實現這一目標嗎?

+2

你總是可以hitCount比如VAR添加到您的拋射和增加每個聯繫人。 –

回答

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]; 
} 
0

也許您可以將#hits存儲在方法的一個屬性和踢中,該方法會在初次命中x秒後檢查命中數量?

換句話說:將命中檢測與獎勵邏輯分開。

1

如果你的獎金是用於2次同時接觸,請查看乾淨,性感的-(NSArray *)allContactedBodies實例方法,你可以調用你的physicsBody。它返回當前與之聯繫的所有其他物理實體的數組。請記住適當地設置聯繫人位掩碼。

+0

儘管這是唯一的出路,但這種方法的問題在於,當彈丸同時擊中兩個敵人時,接觸委託會被召喚兩次。我如何確保第二個電話被忽略? – ZeMoon

+0

不確定你的實現是什麼,但你可以試試 - 當第一次調用聯繫人委託時,你將其中一個聯繫位掩碼(彈丸的掩碼)設置爲零。這可以防止任何後續的調用。如果適用,您可以重新設置位掩碼。 – Batalia