2013-02-09 89 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