2012-02-03 39 views
0

我目前正試圖創建一個無休止的滾動背景,角色上下跳動並收集沿途的物品。 我的問題在於需要創建並移動的項目。CCSpriteBatchNode或NSMutableArray

我看過CCSpriteBatchNode和NSMutableArray,但我不確定要使用哪個。

我回顧了Steffen Itterheim關於在初始化時創建子彈然後在需要時使用它們的書中的示例。 我認爲這會對iPhone造成低效和徵稅。另外,即使它們不可見,是不是所有的子彈都不斷更新,甚至更多地使用iPhone的有限內存和CPU?另一方面,如果我有一個NSMutableArray,並根據需要添加了項目並更新了當前存在的一些選擇項,這是否會更高效。

因此,我的主要問題是在NSMutableArray或CCSpriteBatchNode之間進行選擇,並找出在創建衆多不斷更新的對象中最有效的方法。

謝謝!

+0

我還沒有讀過這本書,但作者不太可能會投入一個'低效'的例子。我最好的建議是「讓它工作」,然後確定你是否有性能問題。如果是這樣,請回到這裏,具體討論一下你的實現問題。沒有一些細節,很難給你任何實際的建議:有多少個精靈,他們在滾動時執行什麼動作等等)。 – YvesLeBorg 2012-02-03 21:33:15

回答

0

如果您正在使用Cocos,如果您計劃同時在屏幕上顯示許多對象,則CCSpriteBatchNode會更好。 CCSpriteBatchNode只能「繪製」一次對象,然後在視圖中重複傳播它。這節省了大量寶貴的CPU資源。這就是爲什麼CCSpriteBatchNode與子彈一起使用的原因,因爲屏幕上通常有很多。另外,如果您的對象頻繁出現,即使一次只有一個或兩個屏幕,CCSpriteBatchNode將使用緩存的圖形而不是重繪,仍可節省CPU資源。

我建議你可以堅持使用Cocos對象,因爲它們旨在通過像NSMutableArray這樣的本機Apple對象來提高像這樣的性能。

但是,如果您堅持使用NSMutableArray,如果您使用的是Cocos,請考慮使用CCArray。但CCSpriteBatchNode可能會是你最好的選擇。

0

完全在屏幕之外的節點很快就被解散了,如果將節點的可見屬性設置爲NO,它將立即被解散,這意味着對於不可見節點基本沒有性能損失。

緩存許多對象實際上比在運行時創建和釋放它們要快,即使這意味着在內存中總是有400個左右。這最多需要200 KB的內存,並避免頻繁的alloc/dealloc循環,您將盡可能避免頻繁的alloc/dealloc循環,特別是在第1代/第2代設備上。