多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > codeigniter > cocos2d 緩存池 對象重復使用

cocos2d 緩存池 對象重復使用

來源:程序員人生   發布時間:2014-10-08 11:11:28 閱讀次數:3840次

1.緩沖池簡單描述


我們知道一個游戲比如跑酷類型的游戲,游戲元素會不斷重復。游戲元素會不斷從屏幕右邊創建出來,當一個元素移出左邊屏幕時,又會消失掉。如果不斷地new 對象,release 對象 會有性能影響。如何優化呢?就涉及到緩存池的概念。


再舉一個例子:一個主角在一個競技場中不斷殺怪。每次有5個怪出現,殺死一個又會出來一個。每次出怪就new 怪,死亡怪就release怪,會很浪費的。已經死亡的怪,我們簡單地給他補滿血不就可以重復使用了嘛!像拍電影,一個人不是真正死亡,只是看起來死了,還是可以重復使用的嘛!


2.緩存池簡單實現


我們可以事先new10個怪放入到一個數組中,簡單把這個數組稱作緩存池,其實就是一個數組。再搞個int的變量表示取數組中第幾個怪,初始化為0,表示取第一個怪。

1.當我們想要從屏幕中創建一個新怪時,不去new,而是用那個int變量從數組中取一個怪拿來用,當然拿來用之后,還要簡單的初始化下,給他補滿血啊,穿上完整衣服等等。再把int變量加1,如果int變量等于數組的長度時,把它歸0。

2.當一個怪被主角殺死時,讓這怪播完死亡動畫后,就remove掉,但不把他完全release掉。

差不多實現就是這樣,簡單吧!只是注意初始緩存池,new對象的數量。一般要大于你實際使用的數量。


3.簡單代碼


//創建緩存池 Vector bonePools; void createBonePools(){ if(bonePools.empty()){ for(int i = 0; i < 30; ++i){ auto oneBone = Bone::create(); bonePools.pushBack(oneBone); } } }

//從緩存池中取一個對象 int _boneIndex; Bone* getOneBone(){ if(_boneIndex == bonePools.size()){ _boneIndex = 0; } Bone* result = bonePools.at(_boneIndex); result->reuseInit();//這個比較重要,重復使用一個元素也要簡單初始化一些東西的,之前死亡的人物記得給他補滿血  ++_boneIndex; return result; }


cocos2d 緩存池 對象重復使用

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美性高清hd | 一级在线观看视频 | 91精品一区二区 | 欧美日本免费 | 国内精品久久久久影院亚洲 | 欧美色成人 | 嫩草影院在线观看未满十八 | 国产亚洲美女精品久久久久 | 国产欧美在线一区二区三区 | 色噜噜狠狠先锋影音久久 | 亚洲综合精品一二三区在线 | 国内精自视频品线六区免费 | 精品国产一区二区三区香蕉沈先生 | 欧美伦理一区 | 亚洲精品 欧美 | www黄色网址| 一本大道高清香蕉中文大在线 | 一级白嫩美女毛片免费 | 女同舌吻janpan | 欧美视频在线观看视频 | japanese强迫第一次护士 | 成人国产在线视频在线观看 | 国产精品欧美一区二区三区不卡 | 成人欧美视频在线观看播放 | 国产精品成aⅴ人片在线观看 | 精品伊人久久久久网站 | 国产人成精品综合欧美成人 | 一级毛片在线不卡直接观看 | 国产片性视频免费播放 | 欧美视频福利 | 亚洲色图 欧美 | 国产精品亚洲第五区在线 | 小说亚洲 | 欧美午夜网 | 日本系列第_1_页_俺去了 | 欧美日韩一 | 日韩欧美一区二区久久黑人 | 三级爱爱视频 | japanese欧美 | 最好免费高清视频在线看 | 日韩欧美一区二区三区在线视频 |