最近在做一個游戲,遇到一個很頭疼,也很奇怪的問題,具體描述如下:
我做了兩個版本的代碼,版本一幀數只有40左右,而版本二的幀數有59,不知道為什么有這么大的差別。
版本一:
auto mapLayer = Layer::create(); //新建一個地圖層
auto map = cMap::create(); //新建一個map
Vector<cMapUnit*> vec; //定義一個地圖單元向量,地圖由5040個地圖單元組成
mapLayer->addChild(map); //把map添加到地圖層
for (int i=0; i<5040; i++)
{
auto v = cMapUnit::create(); //新建地圖單元
auto mapUnitSprite = Sprite::create("mapUnit.png"); //創建精靈
v->setSprite(mapUnitSprite);
v->addChild(mapUnitSprite); //把精靈添加到地圖單元
vec.pushBack(v); //把地圖單元添加到地圖單元向量
map->addChild(v); //把地圖單元添加到map
}
這樣的渲染效率低,幀數只有40左右。
版本二:
auto mapLayer = Layer::create(); //新建一個地圖層
auto map = cMap::create(); //新建一個map
Vector<cMapUnit*> vec; //定義一個地圖單元向量,地圖由5040個地圖單元組成
mapLayer->addChild(map); //把map添加到地圖層
for (int i=0; i<5040; i++)
{
auto v = cMapUnit::create(); //新建地圖單元
auto mapUnitSprite = Sprite::create("mapUnit.png"); //創建精靈
v->setSprite(mapUnitSprite);
mapLayer->addChild(mapUnitSprite); //把精靈添加到地圖層,這是第一個區別
vec.pushBack(v);
//這里沒有map->addChild(v); 這是第二個區別,我發現加上這句話后會顯著影響效率,版本一必須有這句話,否則不會渲染地圖單元
}
這樣的渲染效率高,幀數達到59。
我想知道為什么有這么大差別,我想用版本一,因為它的結構更好,更容易維護。
請木頭兄等大神指點迷津,謝謝!
uj5u.com熱心網友回復:
沒有addChild就不會渲染,版本二少5000多個渲染單位,幀速肯定相對快了uj5u.com熱心網友回復:
哎呀,我看錯了......uj5u.com熱心網友回復:
第一個比第二個多了5040個精靈吧(只是猜測)v->setSprite(mapUnitSprite);//加了5040個精靈
v->addChild(mapUnitSprite);//又添加了5040個精靈
uj5u.com熱心網友回復:
for (int i=0; i<5040; i++){
# cMapUnit 創建
auto v = cMapUnit::create(); //新建地圖單元
## mapUnitSprite 創建
auto mapUnitSprite = Sprite::create("mapUnit.png"); //創建精靈
# cMapUnit操作
v->setSprite(mapUnitSprite);
##mapUnitSprite添加到節點
mapLayer->addChild(mapUnitSprite); //把精靈添加到地圖層,這是第一個區別
#cMapUnit并沒有添加到節點,雖然被vec保持了參考
vec.pushBack(v);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/75809.html
標籤:Cocos2d-x
