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

我以与此处相同的方式解决了这个问题。这是由于在前一个类替换现有类时引用了精灵帧,因此前一个类清理方法调用了清除帧缓存,从而删除了尚未使用的精灵帧,这些精灵帧由新创建的对象。

于 2013-01-18T15:31:45.990 回答
0

从您的异常消息的文本看来,您使用来自不同 spritesheet 的 spriteframes 创建了 sprite。

于 2012-12-04T12:38:50.600 回答