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