2

假设我正在使用 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]; 

因为它会崩溃。

我怎么做?

4

1 回答 1

2

简短的回答:你不能。

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

于 2013-02-25T19:44:19.660 回答