我正在尝试使用CCSpriteBatchNode来减少OpenGL调用和内存使用的数量。
我需要使用以下代码创建CCMenu:
CCSpriteBatchNode *batchNode = [CCSpriteBatchNode batchNodeWithFile:@"atlasGeral.png"];
CCSprite *inputNormal = [CCSprite spriteWithSpriteFrameName:@"normalInput.png"];
CCSprite *inputPressed = [CCSprite spriteWithSpriteFrameName:@"PressedInput.png"];
[batchNode addChild:inputNormal];
[batchNode addChild:inputPressed];
CCMenuItem *input =
[CCMenuItemSprite itemWithNormalSprite:inputNormal
selectedSprite:inputPressed
target:self
selector:@selector(InputMenu:)];
CCMenu *mInputMenu = [CCMenu menuWithItems:input, nil];
这是一个令人印象深刻的消息,消息断言失败 - [CCMenuItemSprite addChild:z:tag:]
任何线索? BTW可以有人创建或指向一些教程,解释如何将这个CCSpriteBatchNode与其他元素一起用作CCMenus,CCMenuItems和其他美女吗? Cocos2D几乎没有关于所有最重要功能的文档。
感谢。
答案 0 :(得分:1)
嗯,inputNormal和inputPress sprite是批处理节点的子节点。因此,当您尝试将它们作为子项再次添加到另一个节点后代时,coco会发出抱怨,因为它们已经有父节点。我不敢做。 imnsho,批量节点严重超额。只有极少数和有限的使用案例才能获得改进收益。
再次,直接来自CCMenuItemSprite代码(版本1.0.1)
-(void) setNormalImage:(CCNode <CCRGBAProtocol>*)image
{
if( image != normalImage_ ) {
image.anchorPoint = ccp(0,0);
image.visible = YES;
[self removeChild:normalImage_ cleanup:YES];
[self addChild:image];
normalImage_ = image;
}
}
menuitem尝试将(已经是子)精灵添加到自身。没有豆子。