2012-01-31 50 views
0

CCSpriteBatchNode背後的想法是爲許多精靈渲染紋理一次,這會提高性能,而不是將每個精靈視爲不同的紋理。CCSpriteBatchNode的作用

但是,我很困惑如何使用這個好處,而不是僅僅使用單個紋理圖集。如果你創建這個紋理:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"gameTexture.plist"]; 

,然後你使用精靈每一個圖像是利用frame方法拉高,然後是沒有使用相同的單紋理渲染所有的圖像,即使批節點是從未介紹過?

當然,你可以使用一個batchnode結合紋理地圖集,但這是一個實際的性能增益?如果你不使用batchnode,它會多次渲染紋理,即使它被緩存了嗎?使用

回答

1

你是不是在每次調用改變質地相同的紋理,但你仍然是呈現不同在glBegin,結束全部精靈,使用CCSpriteBatchNode將確保在它的每一個精靈是在同一個呼叫中呈現

1

性能改進簡單來自於OpenGL調用數量的減少。如果你不使用SpriteBatchNode,你的精靈將來自一個紋理是,但它們都會使得獨立的OpenGL調用。批處理節點對象包含收集其所有子節點的代碼並僅進行一次調用,這就是爲什麼您的精靈必須是同一批處理節點的子節點才能提高性能。

0個批處理節點+ 100個sprites = 100個OpenGL調用。

1個批處理節點+100個精靈(該批處理節點的子節點)= 1個OpenGL調用。

如果你真的有興趣看看CCSpriteBatchNode.m

相關問題