2013-03-10 68 views
0
GMSprite *bulletMove; 
int bulletCount = [bullets count]; 

for(int i = 0; i < bulletCount; i++) 
{   
    if(bulletMove.position.x > 500) 
    { 
     [self removeChild:[bullets objectAtIndex:i] cleanup:YES]; 
    } 
} 

如何刪除該數組中的數組中的孩子,也是對象,以便bulletCount下降整數和調整陣列被移除的對象NSMutable陣列計數不改變刪除後孩子

回答

0

使用下面的代碼:從bulet陣列

[bullets removeObjectAtIndex:i]; 

獲取子彈對象,並使用下面的代碼。

[bullet removeFromParentAndCleanup:YES]; 
+0

當我使用這個,精靈仍然留在屏幕上,這是否佔用內存,我如何刪除精靈圖像/ 我所做的是我創建了一個數組對象的溫度,然後刪除數組對象然後self removechilded臨時對象,你認爲這種方法好嗎? – user2121776 2013-03-10 11:57:44

+0

請看編輯和... – Nit 2013-03-10 12:28:57

0

使用

[bullets removeObjectAtIndex:i]; 

我如何從 數組的數組,也是對象中刪除子使bulletCount下降整數和數組 調整到刪除對象

使用上述方法將從索引i中刪除對象,所有後續對象將會移動一次。

+0

這就是爲什麼它更容易使用for(int i = bulletCount - 1; i> = 0; i - )'以避免索引轉換問題。 – Sulthan 2013-03-10 11:21:33

+0

@Sulthan:我們真的需要手動換檔嗎? – 2013-03-10 11:22:26

+0

當我使用這個,精靈仍然停留在屏幕上,這是否佔用內存,我如何刪除精靈圖像 – user2121776 2013-03-10 11:55:16

0
GMSprite *bulletMove; 


for(int i = 0; i < [bullets count];) 
{   
    if(bulletMove.position.x > 500) 
    { 
     [bullets removeObjectAtIndex:i]; 
    } else { 
     i++; 
    } 
} 

它是不完全的好作風操縱的指數varialbe其體內循環。您可能需要用antother類型的循環重新構建此建議(do-while左右)。然而,基本的想法是[bullest count]總會爲您提供陣列中當前的條目數量。只有在您不刪除當前對象時才能增加索引。如果你刪除它的索引是10(示例),那麼下一個要檢查的就是10。如果你也刪除了那個,那麼下一個要對500進行檢查的是agein,因此要麼刪除它,要麼增加索引。作爲循環的退出標準,請檢查索引是否與數組中的對象數量相對應當前的

編輯:你問題的第二部分:如果你做內存管理的權利,無論你是否ARC,removeObjectAtIndex應該正確地刪除對象本身。 (除非它的保留數高於1或另一個強的參考依然存在,但即使這樣它也會將保留數減少1,並且確實是正確的)