我有一个子类CCNode,我添加了几个相同的小子类CCSprite WHICH IN TURN有几个子类精灵子。我以为我正在使用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,然后将一个段的实例作为子节点添加到batchnode但是这会引发错误。我也不确定我是如何添加CCNodesubclass batchnode的子(子分段)。
顺便说一下,我是否使用了类而不是实例方法代码的味道,这一点已经曝光了吗?
答案 0 :(得分:1)
每个段的实例都会从每个其他段创建不同的batchNode,类似地,每个subSegment实例都会从每个其他子段创建不同的batchNode。因此,您根本没有批处理,解释了大量的绘制调用。
也许你有可能在这两个类之外初始化batchnode,并将它传递给ctor's的segment和subSegment。我也只使用.plist为spriteframe缓存播种一次(只要你不沿途删除精灵帧)。