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 内で使用したいとします。この場合、CCMenuItem のサブクラスである CCMenuItemSprite を次のように使用します。

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 に答える