假设我正在使用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];
因为它会崩溃。
我该怎么做?
答案 0 :(得分:2)
简短回答:你不能。
答案很长(不太完整):您必须编辑CCMenu的代码才能正常工作。恕我直言不值得麻烦,编写自己的支持批处理的按钮/菜单类要容易得多。