Cocos 2D v1.0.1:更改CCMenuItemImage正常图像时崩溃

时间:2012-12-09 10:39:17

标签: objective-c ipad crash cocos2d-iphone

我检索一个崩溃日志文件,在我的存档上的XCode分析显示有问题的代码行之后:

Date/Time:       2012-12-08 23:48:08.930 +0100
OS Version:      iPhone OS 5.1.1 (9B206)
Report Version:  104

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread:  0

Last Exception Backtrace:
0   CoreFoundation                  0x31a4088f __exceptionPreprocess + 163
1   libobjc.A.dylib                 0x3188b259 objc_exception_throw + 33
2   CoreFoundation                  0x31a40789 +[NSException raise:format:] + 1
3   Foundation                      0x374c73a3 -[NSAssertionHandler     handleFailureInMethod:object:file:lineNumber:description:] + 91
4   Killer                          0x0017ed35 -[CCSprite initWithFile:] (CCSprite.m:201)
5   Killer                          0x0017e419 +[CCSprite spriteWithFile:] (CCSprite.m:93)
6   Killer                          0x00123101 -[Player makeZombie] (Player.m:1363)
7   Killer                          0x00105a51 -[PlayScene endOfKilling:] (PlayScene.m:1438)

这清楚地表明以下两行中的第二行崩溃:

NSLog(@"images %@ %@",self.zombieImage,self.zombieImageDown); 
[self.characterSprite setNormalImage:[CCSprite spriteWithFile:self.zombieImage]];

我知道当用户触摸相应的CCMeanuItemImage时,崩溃似乎发生了,如果用户正在触摸它是否有问题,而我们更改它的正常和选择的图像?这是改变形象的正确方式(我在游戏中多次这样做)?

感谢您的想法

2 个答案:

答案 0 :(得分:0)

您的崩溃仅与触摸菜单项有关,因为您在单击按钮时调用的方法中正在执行的操作。

从崩溃报告中,您可以看到导致崩溃的调用堆栈。它说在第201行的CCSprite类中有断言(因为cocos2d是开源的,你可以检查这一行,看看断了什么类型的断言),这是从你的Player类调用1363行的方法makeZombie (你确定你需要这么大的课吗?我假设你在单课中放置了太多的逻辑)。

请检查断言行并检查makeZombie方法中的行。

答案 1 :(得分:0)

有问题的调用是initWithFile,因为在此之后它被称为handlerFailureInMethod。
如果问题是initWithFile,请确保您提供的文件不可用 检查self.zombieImage是否是一个有效的图像文件名。我猜是僵尸图像不是文件名(NSString),而是图像(UIImage),所以如果是这种情况,请用它的文件名替换图像。