2013-02-09 4 views
1

을 CCSpriteBatchNode에 추가 :CCSprite 클립은이 코드 내 스프라이트를 클리핑하고있어

//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

설명 주셔서 감사합니다. 직접 메인 레이어에 추가해야 할 것입니다. 거기에 더 좋은 접근법이 있습니까? 다시 한 번 감사드립니다! –