正确的方法从CCMenu内的批处理节点添加精灵,而不增加绘制调用的数量

时间:2013-02-25 18:17:57

标签: iphone ios ipad cocos2d-iphone

假设我正在使用CCSpriteFrameCache并添加像这样的框架

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"atlas.plist"];
mySpriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"atlas.png"];
CCSprite *oneSprite = [CCSprite spriteWithSpriteFrameName:@"abc"]; //yes I do not use extensions, who need them?
[mySpriteSheet addChild:oneSprite];

这非常有用。您可以在不增加绘制调用的情况下向mySpriteSheet添加大量精灵,但是假设我想在CCMenuItem中使用这些精灵,或者在这种情况下CCMenuItemSprite是CCMenuItem的子类,如下所示:

CCSprite *spriteNormal = [CCSprite spriteWithSpriteFrameName:imagemNormal];
CCSprite *spriteHighlight = [CCSprite spriteWithSpriteFrameName:imagemHighlight];

CCMenuItemSprite *myItem = [CCMenuItemSprite itemWithNormalSprite:spriteNormal
                                                      selectedSprite:spriteHighlight
                                                              target:target
                                            selector:@selector(doSomething)];

然后该项目进入CCmenu

CCMenu *menu = [CCMenu menuWithItems:myItem, nil];

现在,这是问题所在。如果我做

[self addChild:menu];

绘制调用将增加,即使是来自批处理节点的精灵也无法做到

[mySpriteSheet addChild:menu]; 

因为它会崩溃。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

简短回答:你不能。

答案很长(不太完整):您必须编辑CCMenu的代码才能正常工作。恕我直言不值得麻烦,编写自己的支持批处理的按钮/菜单类要容易得多。