Objective c 子类化CCSprite并使用CCSpriteBatchNode

Objective c 子类化CCSprite并使用CCSpriteBatchNode,objective-c,cocos2d-iphone,kobold2d,Objective C,Cocos2d Iphone,Kobold2d,我有一个子类CCNode,我在其中添加了几个相同的小子类CCSprite,这些子类CCSprite又有几个子类sprite子类。我原以为我正确地使用了CCSpriteBatchNode,但我注意到有数百个draw调用正在注册,我认为这应该只有一个 My CCNode子类添加此子类: Segment* segment = [Segment segmentWithState:kState]; [self addChild:segment]; 该段是CCSprite的一个子类,具有: +(id) s

我有一个子类CCNode,我在其中添加了几个相同的小子类CCSprite,这些子类CCSprite又有几个子类sprite子类。我原以为我正确地使用了CCSpriteBatchNode,但我注意到有数百个draw调用正在注册,我认为这应该只有一个

My 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;
然后,此段子类获取子类subsegment的一个子类,该子类具有相同的代码:

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


顺便说一句,我使用的是类而不是实例方法代码气味吗?

段的每个实例都会创建一个不同于其他段的batchNode,类似地,子段的每个实例都会创建一个不同于其他子段的batchNode。因此,您根本不是批处理,而是解释了大量的draw调用


也许您可以在这两个类之外初始化batchnode,并将其传递给segment和subSegment的Sector。我还将使用.plist对spriteframe缓存进行一次种子设定(只要您不删除spriteframe)。

谢谢。实际上,我使用ccspritebatchnode属性尝试了这一点,删除了段和子段中的batchnodes,并将子段添加到父节点中的batchnode中(出于某种原因,我认为batchnode中的精灵子节点是由批处理节点绘制的)。当batchnode调用SortallChildren时,这会在batchnode中引发一个错误事实上,以这种方式使用的精灵的子节点会直接转到batch node,我没有删除它们自己的batchnode,需要删除它们。现在工作。