2013-07-25 29 views
0

我有一个子类CCNode,我添加了几个相同的小子类CCSprite WHICH IN TURN有几个子类的子画面。我以为我正在使用CCSpriteBatchNode,但我注意到数百个绘制调用正在注册,我认为这应该只有一个。子类化CCSprite并使用CCSpriteBatchNode

我CCNode子类增加了这个孩子:

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

段是CCSprite的一个子类:

+(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; 

那么这部分子获得具有相同代码的子子段的孩子:

+(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添加一个批处理节点a然后添加段的一个实例作为一个孩子batchnode,但这会引发错误。我也不确定我会如何添加CCNodesubclass batchnode的子节点(子节段)。

顺便说一句,是我使用类而不是实例方法代码的味道,这是用这个来点亮吗?

回答

1

段的每个实例都会从其他段创建一个不同的batchNode,并且类似地,每个subSegment的实例都会从每个其他子段创建一个不同的batchNode。因此,你根本没有投入,解释大量的平局。

也许有可能在这两个类之外初始化batchnode,并将它传递给段和subSegment的ctor。我还会将spriteframe缓存置于.plist中一次(只要您不一直删除spriteframe)。

+0

谢谢。我实际上用ccspritebatchnode属性尝试过,并删除了段内和子段内的batchnodes,并将子段添加到父节点中的batchnode(我认为由于某种原因batching节点中的子精灵获取由批处理节点绘制)。当它调用sortAllChildren – kidnim

+0

时,这会引发我在batchnode中的一个错误,确实,以这种方式使用的精灵的子节点直接进入批处理节点,我没有删除它们自己的蝙蝠鳍节点并且需要。现在工作。 – kidnim