2013-07-25 1 views
0

저는 서브 클래스 화 된 CCNode를 가지고 있습니다. 여기에 몇 개의 서브 클래 싱 된 스프라이트 자식이있는 동일한 작은 서브 클래 싱 된 CCSprite가 몇 개 추가됩니다. 나는 CCSpriteBatchNode를 적절히 사용하고 있다고 생각했지만, 수백 건의 무승부 콜이 등록되고 있다는 것을 알았고 이것이 단지 하나 일 것이라고 생각했다.CCSprite를 서브 클래 싱하고 CCSpriteBatchNode를 사용합니다.

+(id) segmentWithState:(SegmentState)segmentState { return [[self alloc] initWithState:segmentState];} 

-(id) initWithState:(SegmentState)theSegmentState { 

    segmentSpriteBatch = [CCSpriteBatchNode batchNodeWithFile:@"txt.png"]; 
    [self addChild:segmentSpriteBatch]; 
    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"txt.plist"]; 

    self = [super initWithSpriteFrameName:theSegmentStateFrameName]; 
    if (self){ 
     Subsegment * subsegment = [Subsegment subsegmentWithState:kInvisible]; 
    } 
    return self; 

그런 다음이 세그먼트의 서브 클래스가 동일한 코드를 가지고있는 서브 클래스 서브 세그먼트의 아이를 가져옵니다

Segment* segment = [Segment segmentWithState:kState]; 
[self addChild:segment]; 

세그먼트가와 CCSprite의 서브 클래스는 다음과 같습니다

내 CCNode의 서브 클래스는이 아이를 추가합니다 :

+(id) subsegmentWithState:(SubsegmentState)subegmentState { return... ] 

-(id) initWithState:(SubsegmentState)theSubsegmentState { 
    subegmentSpriteBatch = [CCSpriteBatchNode batchNodeWithFile:@"txt.png"]; 
    [self addChild:subegmentSpriteBatch]; 
    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"txt.plist"]; 

    self = [super initWithSpriteFrameName:theSubegmentStateFrameName]; 
    if (self){ 

    } 
    return self; 

하나의 배치 노드를 CCNodeSUbclass에 추가하려고 시도했습니다. 그런 다음 세그먼트의 인스턴스를 batchnode의 자식으로 추가하지만 오류가 발생합니다. 나는 또한 내가 CCNodesubclass batchnode 자식 (하위 세그먼트)을 추가하는 방법을 잘 모르겠다.

덧붙여 말하면, 이것과 함께 사용되는 인스턴스 메소드 코드 냄새보다는 클래스를 사용하는 것입니까?

답변

1

세그먼트의 각 인스턴스는 다른 모든 세그먼트와 다른 batchNode를 만들고 마찬가지로 모든 subSegment 인스턴스는 다른 모든 하위 세그먼트와 다른 batchNode를 작성합니다. 따라서 그리기 호출이 많다는 것을 설명하면서 일괄 처리하지 않습니다.

batchnode를이 두 클래스 외부에서 초기화하고 segment 및 subSegment의 ctor에 전달할 수 있습니다. 또한 spriteframe 캐시를 .plist로 한 번만 시드합니다 (길을 따라 스프라이트 프레임을 제거하지 않는 한).

+0

감사합니다. 나는 실제로 ccspritebatchnode 속성을 사용하여 그것을 시도하고 세그먼트 및 하위 세그먼트에 대한 batchnode를 제거하고 부모 세그먼트에서 batchnode에 하위 세그먼트를 추가했습니다. (어떤 이유로 batchnode에있는 스프라이트 자식이 배치 노드에 의해 그려지는 것으로 생각했습니다). 이것은 sortAllChildren을 호출 할 때 batchnode에 오류를 던졌습니다. – kidnim

+0

실제로 이러한 방식으로 사용되는 스프라이트의 자식은 일괄 처리 노드로 이동하기 때문에 자체 batchnode를 삭제하지 않아야했습니다. 지금 일합니다. – kidnim