【问题标题】:Cocos 2D v1.0.1 : Crash at changing CCMenuItemImage normal imageCocos 2D v1.0.1 : 更改 CCMenuItemImage 正常图像时崩溃
【发布时间】:2012-12-09 10:39:16
【问题描述】:

我检索了一个崩溃日志文件,在对我的存档进行 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时似乎发生了崩溃,如果用户触摸它,而我们改变它的正常和选择的图像,是否有问题?这是改变形象的正确方式吗(我在游戏中做了几次)?

感谢您的想法

【问题讨论】:

    标签: objective-c ipad crash cocos2d-iphone


    【解决方案1】:

    您的崩溃与触摸菜单项有关,只是因为您在单击按钮时调用的方法中所做的事情。

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

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

    【讨论】:

    • 非常感谢您的帮助,正如我在另一条评论中的其他回答中所说,我不明白为什么我的变量在那时可能为零,每次分配时都会出现断言。任何想法来跟踪这个问题?谢谢
    • 感谢您的建议,我的班级可能太大了,即使对应于一个真正的逻辑实体,我也可能会将一些部分滑入较小的部分,尽管它已经尽可能地完成了: )
    【解决方案2】:

    有问题的调用是 initWithFile,因为在此之后它会被调用 handlerFailureInMethod。
    如果问题出在 initWithFile 上,请确保您证明的文件不可用。
    检查 self.zombieImage 是否是一个有效的图像文件名。我的猜测是僵尸图像不是文件名(NSString),而是图像(UIImage),所以如果是这样的话,用它的文件名替换图像。

    【讨论】:

    • 感谢您的帮助,文件名似乎只是 nil,但我在分配此成员的极少数地方设置了断言,但我什么也抓不到,似乎有什么东西在改变我的变量在某个地方为零,但我找不到怎么做,你能告诉我如何跟踪这个事件吗?好像不是每次都出现这个问题
    • 由于zombieImage 是一个ivar,您可以观察该关键路径以查看它何时更改并将其设置为nil。但是,如果您不跟踪错误,请发布更多代码,以便我们看到zombieImage 何时发生变成零。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    相关资源
    最近更新 更多