1

次のコードがあります。

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"cow_sprite.plist"];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"ray_sprite.plist"];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"chicken_sprite.plist"];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"tank_sprite.plist"];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"human_sprite.plist"];

self.raySpriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"ray_sprite.png"];
self.tankSpriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"tank_sprite.png"];
self.chickenSpriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"chicken_sprite.png"];
self.cowSpriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"cow_sprite.png"];
self.humanSpriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"human_sprite.png"];

[self addChild:self.raySpriteSheet];
[self addChild:self.tankSpriteSheet];
[self addChild:self.chickenSpriteSheet];
[self addChild:self.cowSpriteSheet];
[self addChild:self.humanSpriteSheet];

for (int i = 0; i < 13; ++i) {
    Dice* d = [[Dice alloc] initRandom];

    if (d.fileNum == 0 || d.fileNum == 1) {
        [self.raySpriteSheet addChild:d.sprite];
    }else if(d.fileNum == 2){
        [self.tankSpriteSheet addChild:d.sprite];
    }else if(d.fileNum == 3){
        [self.chickenSpriteSheet addChild:d.sprite];
    }else if(d.fileNum == 4){
        [self.cowSpriteSheet addChild:d.sprite];
    }else if(d.fileNum == 5){
        [self.humanSpriteSheet addChild:d.sprite];
    }
    [rollDiceArray addObject:d];
}

アイデアは、5 つの個別のサイコロ アニメーションに 5 つの個別のスプライト シートを使用できるようにすることです。各ダイの値を事前に決定し、次にスプライト/アニメーションを割り当て、最後にそのスプライトを適切な CCSpriteBatchNode に追加します。

最初の反復では成功しますが、2 回目の反復でエラーが発生し、次のエラーが発生します。

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'CCSprite is not using the same texture id'

何かご意見は?

4

1 に答える 1

2

このエラーは、CCSpriteが使用しているテクスチャとは異なるテクスチャで初期化されたCCSpriteBatchNodeにCCSpriteを追加しようとしたことを示しています。つまり、CCSpriteBatchNodeとそのバッチノードに追加されたすべてのCCSpriteは、同じテクスチャを使用する必要があります。

補足として、牛、光線、戦車、鶏肉、人間の画像がすべて1つのテクスチャアトラスに収まる場合は、必ずそれらを1つのテクスチャアトラスに入れてください。テクスチャアトラスのポイントは、画像を並べ替えて分類することではなく、画像のレンダリングを高速化することです。同じテクスチャアトラスにパックできる画像が多いほど、レンダリングが速くなります。理想的には、スプライトバッチノードが1つだけです。

于 2011-11-10T00:35:24.217 に答える