1

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];

これは、メッセージAssertion failure in -[CCMenuItemSprite addChild:z:tag:] で壊滅的にクラッシュしています

手がかりはありますか?ところで、誰かがこの CCSpriteBatchNode を CCMenus、CCMenuItems、その他の美しさなどの他の要素と一緒に使用する方法を適切に説明するチュートリアルを作成または指摘できますか? Cocos2D には、ほとんどすべての最も重要な機能に関するドキュメントがありません。

ありがとう。

4

1 に答える 1

1

さて、inputNormal スプライトと inputPress スプライトはバッチ ノードの子です。したがって、それらを子として別のノードの子孫に再度追加しようとすると、すでに親があるため、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 は、(すでに子である) スプライトをそれ自体に追加しようとします。豆はありません。

于 2012-06-12T20:05:53.340 に答える