2014-02-20 40 views
1

我有一個遊戲中,我需要出示敵人(SKSpriteNodes),其中有從右到飛行路徑離開,在屏幕上。我現在使它像蘋果的冒險遊戲,有兩個陣列:一個活躍的敵人和一個不活躍的;當遊戲需要添加敵人時(通過更新方法),其中一個來自非活動陣列,將其添加爲活動陣列。當敵人完成它沿着屏幕路徑或當它被破壞,我把它從主動陣列,刪除它從它的父,並把它放在不活躍陣列指數0。SpriteKit SKSpriteNodes管理

代碼:

添加敵人:

enemySN = [_asteroidsInactiveMArray lastObject]; 
[enemySN removeFromParent]; 
[_asteroidsInactiveMArray removeLastObject]; 
[_asteroidsActiveMArray addObject:enemySN]; 
[self addChild:enemySN]; 

刪除敵人:

[enemySN died]; 
[_aliensActiveMArray removeObject:enemySN]; 
[_aliensInactiveMArray insertObject:enemySN atIndex:0]; 

我的擔心是:現在,10個敵人都夠當前設置,但如果我想要將屏幕上添加的敵人加倍,那麼10就不夠了。

我要保持這種風格,並試圖修改數組的大小時,我沒有任何離開了?我是否應該採取另一種方法並停止使用陣列,並根據需要初始化敵人?

+1

你的問題似乎是你可以使用的精靈池的大小,或者你甚至應該使用精靈池。這取決於你的遊戲,這不是某人將能夠爲你回答的問題。製作你的遊戲,並處理出現的問題。如果您想在實際運行之前瞭解更多關於此主題的內容,您可以谷歌和/或閱讀http://en.wikipedia.org/wiki/Object_pool_pattern – prototypical

+0

感謝您的鏈接。正如其中所述,_在某些情況下,簡單的對象池(不包含外部資源,但僅佔用內存)可能效率不高,可能會降低性能。那麼,我認爲這不是這種情況。這些是SKSpriteNode的自定義類,它們使用圖像加載,物理和初始化構造函數中的不同對象。所以,至少現在,我會像這樣離開它。 –

+0

我認爲這裏所接受的答案是100%,你正在着手進行不成熟的優化。但是,瞭解聯合和它所處的情況以及不適用的情況並沒有什麼不對,因此您知道。 – prototypical

回答

2

這是Premature Optimization的情況下。

你甚至不知道你的問題可能是又 - 它可能是內存使用情況,也可能是所花的時間搜索陣列,添加/刪除元素,你之前可能不會有任何問題可言運行到填充限制,以防止你在算法變得絲毫沒有效率之前在屏幕上畫出更多的敵人。

你甚至會發現你目前的做法是不是重新創建精靈慢,所以你改變它。但是,這種新方法成爲一個重要的問題,因爲它不會擴大規模。您只能通過測試和測量發現問題,但又會發現:不成熟的優化。

修復您實際遇到的問題;不要追逐「maybes」。

至於NSMutableArray大小不像C數組那樣是固定的。如果向其中添加更多項目,NSMutableArray會動態增長,並在您移除項目時相應縮小。

+0

哇,那個網站是金色的!感謝您的建議。從現在開始,我將改變對解決代碼問題的看法。 –