Cocos2d-x利用CCSpriteBatchNode提高渲染效率

來源:互聯網
上載者:User

猴子原創,歡迎轉載。轉載請註明: 轉載自Cocos2D開發網--Cocos2Dev.com,謝謝!
原文地址: http://www.cocos2dev.com/?p=331


以前寫過一個遊戲中的天氣系統,今天有人說我的天氣系統有點卡,不是很好用。我看下了他的代碼,發現他改了My Code,把CCSpriteBatchNode刪除了,直接用addChild,每個sprite都是重新讀取的貼圖。


我想說,同學呀,你把暴風雪所有特效開啟後,你有沒有注意下你的遊戲情境顯示了1000多渲染批次。這能不卡嗎?


今天剛好有點時間,我介紹下CCSpriteBatchNode,以及利用它最佳化遊戲渲染效率。


在cocos2d-x 2.x 之後,大家都看到了左下角的FPS變成3行,多了兩行資料。

最上面一行是指的當前情境的渲染批次。(簡單理解為需要渲染多少個貼圖出來)

中間一行是渲染每一幀需要的時間。

最下行就是大家熟悉的FPS。


CCSpriteBatchNode介紹:


1、先說下渲染批次:這是遊戲引擎中一個比較重要的最佳化指標,指的是一次渲染凋用。也就是說,渲染的次數越少,遊戲的運行效率越高。

2、CCSpriteBatchNode就是cocos2d-x為了降低渲染批次而建立的一個專門管理精靈的類。


舉例介紹:

1、使用CCSprite建立1000個Icon.png到情境中,這樣渲染批次就是1000(暫且不考慮其他的精靈)

for(int i = 0;i < 1000;++i){        int x = arc4random()%960;        int y = arc4random()%640;        CCSprite* testIcon = CCSprite::create("Icon.png");        testIcon->setPosition( ccp(x, y) );        addChild(testIcon);}

如下:

上面的可以看到,建立了1000個Icon到情境中,這是的FPS是22,渲染批次是1000次。


2、使用CCSpriteBatchNode批量渲染,一次渲染就把所有的CCSprite繪製出來。大大降低渲染批次。


舉例介紹:

1、使用CCSprite建立1000個Icon.png到情境中,但是這裡利用了CCSpriteBatchNode批量渲染。這時的渲染批次、FPS如何呢?

CCSpriteBatchNode* batchNode = CCSpriteBatchNode::create("Icon.png", 1000);batchNode->setPosition(CCPointZero);this->addChild(batchNode);    for(int i = 0;i < 1000;++i){        int x = arc4random()%960;        int y = arc4random()%640;        CCSprite* testIcon = CCSprite::createWithTexture(batchNode->getTexture());        testIcon->setPosition( ccp(x, y) );        batchNode->addChild(testIcon);}

如下:

上面的可以看到,建立了1000個Icon到情境中,這是的FPS是39.9,渲染批次是1次。

註:
1、
CCSpriteBatchNode::create(const char *fileImage);//利用貼圖建立,預設子節點數量29.(數量不夠時,系統會自己增加)

CCSpriteBatchNode* batchNode = CCSpriteBatchNode::create(const char *fileImage, unsigned int capacity);//利用貼圖建立,並指定子節點數量


2、使用CCSpriteBatchNode時,所使用的貼圖必須是同一張圖片,也不能指定精靈的深度。所有的精靈都必須在同一渲染層。


3、但是項目中總不可能局限於一張貼圖上,所以你可以把多張貼圖合并成一張大貼圖(合并的工具很多,我不介紹了)。所以利用合成後的大貼圖建立一個CCSpriteBatchNode。

然後建立CCSprite的時候,設定貼圖的地區就可以了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.