2013-02-09 88 views
1

我剪輯我的精靈與此代碼:夾了CCSprite加入CCSpriteBatchNode

//At my CCSprite subclass m. 

-(void)visit 
{ 
CGPoint worldOrg = [self convertToWorldSpace:ccp(0, 0)]; 
CGPoint dest = [self convertToWorldSpace:ccp(self.contentSize.width, self.contentSize.height)]; 
CGPoint dims = ccpSub(dest, worldOrg); 

glEnable(GL_SCISSOR_TEST); 

glScissor(worldOrg.x, worldOrg.y, dims.x, dims.y); 

#define SHOW_CLIPPED_AREA 1 

#if SHOW_CLIPPED_AREA 
//Draws a red rectangle showing clipped area 
ccDrawSolidRect(ccp(0, 0), ccp(1024, 1024), ccc4f(64, 0, 0, 128)); 
#endif 
[super visit]; 

glDisable(GL_SCISSOR_TEST); 
} 

然後,只需創建精靈像往常一樣,調整sprite.contentSize屬性無論我需要:

CCSprite aSprite = [CCSprite spriteWith...]; 
aSprite.contentSize = CGSizeMake(20,20); 
//Add it to my layer 
[self addChild:aSprite]; 

它按預期工作!

問題...

當它添加到CCSpriteBatchNode,它不會夾精靈......它顯示了精靈,但沒有裁剪它。

有人可以幫我解決這個問題,我到處搜索,沒有回答這個問題。

我也使用了Steffen Itterheim的ClippingNode類,但是我也有問題將它添加到CCSpriteBatchNode中。

任何幫助將不勝感激。

回答

0

剪裁或任何自定義繪圖將不適用於精靈批量的精靈。

CCSpriteBatchNode不會調用其子對象的訪問(或繪製)方法,因爲批處理節點會接管對子對象的渲染。因此,當您對精靈進行精靈批處理時,您在CCSprite的繪圖或訪問方法中編寫的任何代碼都將不起作用。

+0

感謝您的解釋,我想我必須將它們直接添加到主圖層。有沒有更好的方法呢?再次感謝! – 2013-02-10 00:36:30