剪辑添加到CCSpriteBatchNode的CCSprite

时间:2013-02-09 23:53:19

标签: cocos2d-iphone ccsprite clipping 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时,它不会剪切精灵......它会显示精灵,但不会剪切它。

有人可以帮我解决这个问题吗,我在Google上搜索过,但没有答案。

我还使用了Steffen Itterheim中的ClippingNode类,但是我也遇到了将其添加到CCSpriteBatchNode的问题。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

剪贴画或任何自定义绘图不适用于精灵批处理的精灵。

CCSpriteBatchNode不会在其子节点上调用visit(也不是draw)方法,因为批处理节点接管了子节点的渲染。因此,当您对精灵进行精灵批处理时,您在绘制或访问CCSprite方法时编写的任何代码都将无效。