2013-02-09 2 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, это обыкновение клип спрайт ... он показывает спрайт, но не обрезая ее.

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

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

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

ответ

0

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

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

+0

Спасибо за ваше объяснение, я думаю, мне придется добавить их прямо в основной слой. Есть ли лучший подход для этого? Еще раз спасибо! –