2

次のようなクラッシュが発生し続けます。*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'CCSprite: Batched sprites should use the same texture as the batchnode'

これが何を意味するのかよくわかりません。クラッシュをグーグルで検索しましたが、結果が得られませんでした。また、これは、ゲームの 2 番目のシーンから戻った後に最初のシーンに戻ったときにのみ発生します。

コードを再確認し、スプライト シート内のすべての画像が子としてバッチ ノードに追加されていることを確認しました。また、スプライト シートにないアプリ内の画像が、バッチ ノードではなくレイヤーに子として追加されるようにします。

とにかく、このクラッシュの原因は何ですか?どうすれば修正できますか?

ありがとう!

Edit1 :私のアプリのこの行で起こっているようです:

[self.spriteLeft setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:imageName]];

私は NSLog imageName を返します: MyImage.png 、次にロードした plist と pvr.ccz を調べ、 MyImage.png は間違いなくそこにあります。したがって、すべてが正しく見えるのに、なぜクラッシュするのかわかりません。また、スプライト シートに画像をロードする場所では、どこでも spriteWithFile を使用しないようにします。

4

1 に答える 1

2

これは単純に、テクスチャを使用して CCSpriteBatchNode オブジェクト オブジェクトを作成するとき、後で CCSpriteBatchNode にスプライトを追加するときに、CCSpriteBatchNode に追加するすべてのスプライトが同じテクスチャからのものでなければならないことを意味します。例えば:

NSString *spriteName = @"agility"; // an example, this code comes from a method that returns the batchNode
                                   // for many status types

NSString *plist = [NSString stringWithFormat:@"status_%@.plist",spriteName];
NSString *textureFileName = [NSString stringWithFormat:@"status_%@.pvr.gz",spriteName];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:plist textureFile:textureFileName];
CCSpriteBatchNode *batchNode = [CCSpriteBatchNode batchNodeWithFile:textureFileName];

//  plist has a frame named status_agility_Ok.png

CCSprite *frameStatusOk = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"status_%@_Ok.png",spriteName]];  
[batchNode addChild:frameStatusOk]; // this will work, both the sprite and the batch node have the same texture

CCSprite *frameStatusNotOk=[CCSprite spriteWithFile:@"someOtherTextureFile.pvr.gz"];
[batchNode addChild:frameStatusNotOk]; // this will fail an assertion and crash.
于 2012-09-09T11:30:16.087 に答える