0

我有一个子类 CCNode,我向其中添加了几个相同的小子类 CCSprite,而这些子类 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;

我尝试将一个批处理节点添加到 CCNodeSUb 类,然后将一个段的实例作为子节点添加到批处理节点,但这会引发错误。我也不确定如何将子项(子段)添加到 CCNode 子类批处理节点中。

顺便说一句,我使用类而不是实例方法的代码气味会因此而暴露出来吗?

4

1 回答 1

1

每个段的实例都从每个其他段创建一个不同的batchNode,类似地,subSegment 的每个实例都从每个其他子段创建一个不同的batchNode。因此,您根本没有进行批处理,这解释了大量的绘图调用。

也许您可以在这两个类之外初始化batchnode,并将其传递给段和子段的ctor。我还将使用 .plist 只为 spriteframe 缓存播种一次(只要您不沿途删除 spriteframe)。

于 2013-07-25T03:01:26.087 回答