0

我如一個精靈,然後當它與第二個精靈發生碰撞,那精靈的孩子被刪除:boundingBox的還有孩子被刪除後

if (CGRectIntersectsRect(spriteOne.boundingBox, self.swat.boundingBox)) 
    { 
     if (spriteOne.tag == 0){ 
      [self removeChild:spriteOne cleanup:YES]; 
     } 
     if (spriteOne.tag == 1){ 
      [self removeChild:spriteOne cleanup:YES]; 
     } 
} 

這工作我怎麼想,和精靈在屏幕上消失。然而,似乎boundingBox仍然存在,即使圖像不是這樣,並且這導致了評分等問題。所以,我想知道的是如何「激活」精靈的boundingBox,以便當兩個精靈第一次冒險時,碰撞被檢測到,但之後的任何時候都不會。

在此先感謝。

+0

如何「邊框依然存在」表現出來?你觀察到什麼錯誤? – YvesLeBorg

+0

當兩個精靈發生碰撞時,我會調用一個方法,將分數加1。會發生什麼是他們第一次碰撞時,+1分被添加到分數中,第一個精靈消失。然而,任何時候,第二個精靈懸停在第一個精靈「死亡」的位置上,都會添加額外的點。 – akuritsu

回答

0

據我所知,碰撞後你應該刪除sprite。

你會試試嗎?

if (CGRectIntersectsRect(spriteOne.boundingBox, self.swat.boundingBox)) 
{ 
    if (spriteOne.tag == 0){ 
     [spriteOne removeFromParentAndleanup:YES]; 
    } 
    if (spriteOne.tag == 1){ 
     [spriteOne removeFromParentAndleanup:YES]; 
    } 
} 

您是否嘗試添加一些NSLog跟蹤來查看精靈是否真的被刪除?

0

您必須保留spriteOne。如果有一個很好的理由,以保持它周圍,這樣做:

if (spriteOne.visible && CGRectIntersectsRect(spriteOne.boundingBox, self.swat.boundingBox)) 
{ 
    if (spriteOne.tag == 0){ 
     spriteOne.visible=NO; 
    } 
    if (spriteOne.visible && spriteOne.tag == 1){ 
     spriteOne.visible=NO; 
    } 
} 

之後,當您在遊戲需要再次spriteOne,只需設置其知名度爲YES;

如果沒有,你有泄漏,而做到這一點:

if (spriteOne && CGRectIntersectsRect(spriteOne.boundingBox, self.swat.boundingBox)) 
{ 
    if (spriteOne.tag == 0){ 
     [self removeChild:spriteOne cleanup:YES]; 
     self.spriteOne=nil; // assumes you have a property for spriteOne 
    } 
    if (spriteOne && spriteOne.tag == 1){ 
     [self removeChild:spriteOne cleanup:YES]; 
     [spriteOne release]; // assumes no property for spriteOne 
     spriteOne=nil;   // dont forget this ! beware of zombies 
    } 
}