0

これをデバッグする方法を静かに理解することはできません。CCSceneを実行していますが、シーンを置き換えると、次のエラーメッセージが表示されます。

シーンには、CCSpriteSubclassが追加されたスプライトバッチノードがあります。

これがクリーンアップ方法であり、その下にアサーション失敗メッセージが表示されます。

-(void) cleanup
{
    [[GameController sharedGameController].musicLayer removeMusicSourceForKey:backgroundMusicFileName];


    [CCTextureCache purgeSharedTextureCache];
    [CCSpriteFrameCache purgeSharedSpriteFrameCache];
    [CCAnimationCache purgeSharedAnimationCache];

//    [[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
    [super cleanup];
}

バッチノードは、initWithId:(int)sceneIdメソッドで次のように作成されます。

//Prepare sprites sheets for the rest of the game art
[frameCache addSpriteFramesWithFile:[NSString stringWithFormat:@"art%i-hd.plist", sceneId]];
sharedSpriteMainBatchNode = [CCSpriteBatchNode batchNodeWithFile:[NSString stringWithFormat:@"art%i-hd.png", sceneId]];

次に、すべてのCCSpriteSubclassオブジェクトを追加します。

これがアサーション失敗メッセージです。

** Assertion failure in -[CCSpriteSubclass setTexture:], /Users/xxx/Desktop/xxx/xxx/libs/cocos2d/CCSprite.m:934
2012-12-03 12:54:33.335 RockTale[869:707] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'CCSprite: Batched sprites should use the same texture as the batchnode'
*** First throw call stack:
(0x338d28bf 0x303c61e5 0x338d27b9 0x311193b3 0x9ad43 0x9a2fb 0x4bca3 0x44ddf 0x38b07 0x503f7 0x94c03 0xbbeed 0xbcfe7 0x34fb7423 0x34fb7379 0x31b4cf93 0x36e52891 0x3389bf43 0x338a6553 0x338a64f5 0x338a5343 0x338284dd 0x338283a5 0x37f9afcd 0x3128b743 0x2edf 0x2ea0)
terminate called throwing an exception(lldb) 

編集:setTextureメソッドにブレークポイントを追加しました。これが私が「見ない」ものです:)

サブクラスのsetTextureメソッドのブレークポイント

編集2:Javaのように完全なスタックトレースを取得できたらいいのにと思います。別の質問でこれを尋ねたところ、グローバル例外を追加する必要があると言われました。スタックトレースを取得する方法を理解する必要があります。 。

4

2 に答える 2

0

例外メッセージのテキストから、さまざまなスプライトシートのスプライトフレームを使用してスプライトを作成しているようです。

于 2012-12-04T12:38:50.600 に答える
0

私はここと同じ方法でこの問題を解決しました。これは、前のクラスが既存のクラスを置き換えている間に参照されたスプライトフレーム、したがって前のクラスのクリーンアップメソッドがパージフレームキャッシュを呼び出していたため、その結果、メモリにロードされている未使用のスプライトフレームが削除されていたためです。新しく作成されたオブジェクト。

于 2013-01-18T15:31:45.990 に答える