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