CCSpriteBatchNode的使用
研究了一下CCSpriteBatchNode,說一下個(gè)人理解。
我們通常對(duì)精靈添加的屏幕的步驟是創(chuàng)建精靈,添加到屏幕。現(xiàn)在我們使用了CCSpriteBatchNode以后,
精靈的添加是首先創(chuàng)建精靈,然后將精靈添加到CCSpriteBatchNode上面去,最后再將CCSpriteBatchNode里面的眾多精靈一次性的繪制到屏幕上面。
這樣就減少了渲染次數(shù),提高了幀率。不過需要注意的是:添加進(jìn)batchNode里面的精靈,都是要在CCSpriteBatchNode中是可以找到的
如下面的代碼:
CCSpriteBatchNode *batchNode = CCSpriteBatchNode::create("icon.png");this->addChild(batchNode);pSprite = CCSprite::create("icon.png");pSprite->setPosition(ccp(150,220));//精靈添加到batchNode中,此時(shí)精靈已經(jīng)繪制到了屏幕上了batchNode->addChild(pSprite);
上面的代碼就是batchNode中因?yàn)榇嬖趇con.png這個(gè)圖片,所以是icon.png的sprite可以添加到這個(gè)batchNode里面去
如果你添加其它圖片到batchNode里面去的話,直接報(bào)錯(cuò),程序掛了。
但是我們?cè)趺礃硬拍芴砑佣鄰埐煌瑘D片的精靈到Sprite里面呢?
可以通過CCSpriteFrameCache將TP打包的多張圖片讀入內(nèi)存,這樣就可以解決上面那個(gè)需求了。
如下代碼:
//載入TP打包的plist和png文件到內(nèi)存(有2張圖片分別是res1.png和res2.png)CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("res.plist");CCSpriteBatchNode *batchNode = CCSpriteBatchNode::create("res.png");this->addChild(batchNode);//創(chuàng)建精靈pSprite = CCSprite::createWithSpriteFrameName("res1.png");pSprite->setScale(0.2f);pSprite->setPosition(ccp(150,220));//精靈添加到batchNode中,此時(shí)精靈已經(jīng)繪制到了屏幕上了batchNode->addChild(pSprite);pSprite2 = CCSprite::createWithSpriteFrameName("res2.png");pSprite2->setScale(0.2f);pSprite2->setPosition(ccp(100,250));//精靈添加到batchNode中,此時(shí)精靈已經(jīng)繪制到了屏幕上了batchNode->addChild(pSprite2);上面的代碼在屏幕上只繪制1次。不像我們創(chuàng)建精靈直接繪制到屏幕上那樣,創(chuàng)建幾個(gè)精靈添加到屏幕上就需要繪制幾次。假如上面的代碼沒有使用CCSpriteBatchNode,而是直接創(chuàng)建精靈添加到CCLayer上的話,我們的繪制次數(shù)是2、
當(dāng)我們?cè)谄聊簧侠L制幾千個(gè)精靈時(shí),這種使用batchNode的好處就可以體現(xiàn)了。
可以把CCSpriteBatchNode想像成一個(gè)Layer(繪制到真正CCLayer屏幕之前的緩沖層Layer),關(guān)于精靈疊放層次的調(diào)整是在添加到batchNode上時(shí)調(diào)整的,調(diào)整好以后,就可以再將這一張batchNode整個(gè)繪制到CCLayer屏幕上面。
所以我們不能在將batchNode添加到真正的層時(shí),再來調(diào)整精靈的層次結(jié)構(gòu),這時(shí)已經(jīng)遲了。
?
轉(zhuǎn)載于:https://www.cnblogs.com/vokie/p/3602061.html
總結(jié)
以上是生活随笔為你收集整理的CCSpriteBatchNode的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝莓果汁值得购买吗?
- 下一篇: 健康贵族奶油是甜的吗?