2014-09-05 46 views
0

這裏目前確定的是,我用我的didBeginContact委託方法的代碼片段:接觸使用SprikeKit聯繫代表

- (void)didBeginContact:(SKPhysicsContact *)contact 
{ 

    for (Lasers *laser in self.lasers.spawnArray) { 
     if (contact.bodyB == self.player.physicsBody && [contact.bodyA.node.name isEqual:laser.sprite.name]) { 

      if ([self.lasers isDoneSpawning]) { 
       if (!self.player1.isSuperPlayer) { 
        [self playerDied]; 
       } 
      } 


     } 
    } 
} 

因此,有紅色激光束,如果球員跑進能殺死玩家他們。如果玩家當前具有superPlayer加電激活,那麼玩家可以穿過這些紅色光束。

上面的代碼完美地實現了這一目標,但是當玩家啓動加電並且在紅色光束中間站立並且停止加電時,玩家不會死亡。原因是這種方法只在兩個精靈之間的初始接觸開始時才運行。

我不認爲有一個委託方法來確定是否目前正在接觸的精靈。有沒有人有這個解決方案?

+1

也許在上電開始時將'contactTestBitMask'設置爲不接觸激光器,然後在上電結束時將其重新設置回去?我相信會產生一個'didEndContact',然後是'didBeginContact',允許相應的代碼發揮作用。 – ColGraff 2014-09-05 14:12:30

+0

我會試試這個 – rjm226 2014-09-05 14:18:34

+0

這工作!發佈它作爲答案,我會接受它。 – rjm226 2014-09-05 14:21:13

回答

1

contactTestBitMask設置爲在上電開始時不接觸激光器,然後在上電結束時將其重新設置。這將生成一個didEndContact然後一個didBeginContact,允許適當的代碼發揮作用。

0

這更是一個黑客,但要達到正確的功能...

設置你的超級功率可達結束後,立即刪除並重新添加您的激光束。

這將表示一個新的didBeginContactEvent並應該殺死您的播放器。

+0

哈...我會嘗試,但肯定是哈克! – rjm226 2014-09-05 14:17:41

+0

最後它很接近,需要添加和刪除'contactTestBitMask' – rjm226 2014-09-05 14:22:23

+0

哈哈感謝您的更新。很高興你找到你的解決方案。 – meisenman 2014-09-05 15:32:36