2012-02-19 64 views
3

使用CCSpriteBatchNode的好處是每個子項都不是由OpenGL單獨繪製的,因此如果屏幕上有許多相同的圖像,它將提高使用批處理節點的性能。CCSpriteBatchNode:使用單個框架還是整個紋理圖集?

但是,我很好奇,如果你將整個紋理圖集加載到CCSpriteBatchNode中會發生什麼;這是否意味着當你在紋理地圖集中使用單個精靈幀時,它正在(幕後)繪製紋理內的所有精靈幀?

換句話說,有沒有這樣做之間在性能上有什麼區別:

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

CCSpriteFrame *starFrame=[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"throwstar.png"]; 

stars=[CCSpriteBatchNode batchNodeWithTexture:starFrame.texture]; 

[self addChild:stars]; 

或者,而不是僅僅使用整個紋理圖集,而不是starFrame.texture批次的節點?

回答

1

CCSpriteBatchNode繪製其子節點。因此只繪製添加到其中的子對象(必須是CCSprite對象)。而且由於精靈使用CCSpriteFrame,每個孩子只渲染由精靈框架定義的部分紋理。

CCSpriteFrame對象持有對其使用的紋理的引用。這與CCSpriteBatchNode紋理具有相同的紋理。換句話說,精靈幀的紋理總是紋理圖集的紋理,而不僅僅是紋理的一部分。這就是CCSpriteFrame中的CGRect所做的,它指示精靈只繪製較大紋理的特定區域。

+0

當你說batchnode繪製它的孩子時,它只能「畫」它們所有的一次,正確(在一批,一個GL呼叫)?但是你也提到每個孩子只會呈現其紋理的一部分。因此,如果多個孩子從同一個批次節點紋理中獲得不同的幀,那麼每個孩子都會得到自己的渲染調用,因爲它是紋理的不同部分? – johnbakers 2012-02-20 01:26:37

相關問題