Клип 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 он не будет обрезать спрайт... он показывает спрайт, но не обрезает его.

Может кто-нибудь, пожалуйста, помогите мне с этим, я погуглил везде без ответа на это.

Я также использовал класс ClippingNode из Steffen Itterheim, но у меня также возникают проблемы при добавлении его в CCSpriteBatchNode.

Любая помощь будет оценена.

1 ответ

Обрезка или любой пользовательский рисунок не будут работать со спрайтами в паре.

CCSpriteBatchNode не будет вызывать методы посещения (или рисования) для своих дочерних элементов, поскольку узел пакета принимает на себя рендеринг дочерних элементов. Поэтому любой код, который вы пишете в методах рисования или посещения CCSprite, не будет иметь никакого эффекта при спрайте-пакетировании спрайта.

Другие вопросы по тегам