子类化CCSprite并使用CCSpriteBatchNode
问题描述:
我有一个子类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的子节点(子节段)。
顺便说一句,是我使用类而不是实例方法代码的味道,这是用这个来点亮吗?
答
段的每个实例都会从其他段创建一个不同的batchNode,并且类似地,每个subSegment的实例都会从每个其他子段创建一个不同的batchNode。因此,你根本没有投入,解释大量的平局。
也许有可能在这两个类之外初始化batchnode,并将它传递给段和subSegment的ctor。我还会将spriteframe缓存置于.plist中一次(只要您不一直删除spriteframe)。
谢谢。我实际上用ccspritebatchnode属性尝试过,并删除了段内和子段内的batchnodes,并将子段添加到父节点中的batchnode(我认为由于某种原因batching节点中的子精灵获取由批处理节点绘制)。当它调用sortAllChildren – kidnim
时,这会引发我在batchnode中的一个错误,确实,以这种方式使用的精灵的子节点直接进入批处理节点,我没有删除它们自己的蝙蝠鳍节点并且需要。现在工作。 – kidnim