0

ログでこの例外が発生しています

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

私がやろうとしているのは、通常の「myfile.png」ファイルをSpriteBatchNode

**バッチノードの宣言

CCSpriteBatchNode *_backgroundLayer = [CCSpriteBatchNode batchNodeWithFile:@"sprites.png"];

** 利用方法

このラインは完璧に機能します

CCSprite *sprite1 = [CCSprite spriteWithSpriteFrameName:@"PngFileKeptInSpriteSheet.png"];
[_backgroundLayer addChild:sprite1];

しかし、直接 *.png ファイルを使用してバッチ ノードに追加すると、クラッシュします。

    CCSprite *sprite2 = [CCSprite spriteWithFile:@"myfile.png"];

オンラインでクラッシュする

        [_backgroundLayer addChild:sprite2];

さらにデバッグすると、次のことがわかりました。

アサーションの失敗はファイルにありますCCSpriteBatchNode.m

内部メソッド-(void) addChild:(CCSprite*)child z:(NSInteger)z tag:(NSInteger) aTag

行でNSAssert( child.texture.name == textureAtlas_.texture.name, @"CCSprite is not using the same texture id");

PS:「通常」とは、* .plistファイルから取得されていないことを意味します

4

1 に答える 1

2

何よりもまず、cocos2D を更新します。ただし、それはあなたの問題ではなく、おそらく最新バージョンでは「修正」されていません。これは本当にバグではありません

バッチ ノードでは、バッチ処理するすべてのスプライトが同じテクスチャを使用している必要があります。スプライト シートをロードすると、1 つの大きなテクスチャが使用されます。を呼び出すとspriteWithFile、cocos2d はその画像からテクスチャを作成します。

を使用してスプライトからバッチ ノードを作成することはほとんどありませんspriteWithFile。私が考えることができる唯一のシナリオは、同じ画像を何度も描きたい場合です。(同じテクスチャからの多くの画像ではなく)。

要するに、あなたがやろうとしていることはサポートされておらず、2 つのスプライトはバッチ処理できないため、とにかくあまり意味がありません。

于 2014-09-04T07:10:01.427 に答える