cocos2d-x 對象池機制:可回收與重複使用

另一個能有效提高內存和計算效率的是對象池的使用。其本質與緩存類似,即希望能減少那些頻繁使用的對象的重複創建和銷燬,例如飛行射擊類遊戲中的子彈。使用對象池機制能帶來兩方面的收益,首先是減少對象初始化階段的重複計算,其次是避免反覆地向操作系統申請歸還內存。一個很好的例子就是捕魚遊戲中的魚,魚和魚之間的屬性是類似的,不一樣的僅僅是當前的座標位置及正在播放的動作幀。那麼,當魚游到屏幕後,可以不對其進行銷燬,而是暫存起來。某一時刻需要重新創建魚時,我們可以將其從對象池中取出,重新申請內存並初始化,這樣就大大減輕了cup的負擔。

對象池和緩存很像,但比內存更抽象,也更簡單一些,因爲我們不需要考慮從哪裏加載的問題:都已經被抽象爲初始化函數了。而且更簡單化的是,加入對象池的每一個對象都是無差別的,我們不需要對每個對象進行特定的標記,直接取出任意一個未使用的對象即可。

看完上面的描述,讀者應該有了初步的認識:緩存是一個字典,而對象池則是一個數組。得益於引用計數的內存管理機制,只需要在數組上做適當封裝就可以提供一個對象池的功能了。儘管如此,一個高效實現的對象池還需考慮如何有效地處理對象的生成和歸還,以及佔用內存的動態增長等問題。因此,我們不妨藉助前人成果,在已有對象池的基礎上搭建適合我們遊戲使用的對象池。


以上摘自《cocos2d-x高級開發教程》火烈鳥網絡科技 編著




發佈了20 篇原創文章 · 獲贊 0 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章