2011-08-05 58 views
0

我在Mac OS X 10.6.8上使用Xcode 4与Cocos2D。我正在试图为动画使用精灵表。这是我有的代码:添加对象时NSMutableArray崩溃应用程序

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"scrollAnimation.plist"]; 
CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"scrollAnimation.png"]; 
[self addChild:spriteSheet]; 

NSMutableArray *animFrames = [NSMutableArray array]; 

for(int i = 0; i < 10; i++) { 
    [animFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"scroll%d.png", i]]]; 
} 

self.scrollAnim = [CCAnimation animationWithFrames:animFrames delay:0.05f]; 

self.scroll = [CCSprite spriteWithSpriteFrameName:@"scroll0.png"]; 
_scroll.position = ccp(_winSize.width*1.5, _winSize.height*1.5); 
[spriteSheet addChild:_scroll]; 

这在模拟器中正常工作,但是当我得到设备构建时,它崩溃了。我已经缩小到将对象添加到数组。如果我在for循环之前注释掉所有内容,那么只需添加spriteFrameByName部分即可。但是,当我尝试将其放入数组中时,应用程序会在设备上崩溃。

任何帮助?

+0

你没有任何错误信息与崩溃?那个时候堆栈跟踪看起来像什么? – sergio

+0

出于某种原因,在我的设备上进行测试时,我无法收到任何错误消息。它在模拟器上完美工作,所以我不会在那里发生任何错误。 – user794895

回答

0

这种行为最可能的原因是您的应用程序占用了它拥有的所有内存,操作系统将其杀死。我这样说是因为在这种情况下,您通常不会从崩溃日志中获得任何提示,而且在您的应用在模拟器中工作但不在设备中时也很典型。

因此,为了调查问题,我会首先检查是否存在内存警告痕迹(如果covos2d已启用跟踪)在崩溃之前。这将是一个明确的迹象。

实际上,如果出现内存警告,还有第二种可能的结果导致崩溃。您的应用程序收到内存警告(查看cocos2d跟踪);你的纹理缓存会被清空,所以当你尝试使用你认为预缓存的纹理时,应用会崩溃。但在这种情况下,错误会更加冗长。如果你认为这个问题与此有关,看看这篇文章:http://labs.freescapes.org/blog/2011/07/cocos2d-and-memory-warnings/

0

我发现的东西在模拟器中工作,但没有在设备上工作的一个原因是因为该文件的名称输入错误。我会检查,以确保scrollAnimation.plist的名称不是真的ScrollAnimation.plist或scrollanimation.plist和scroll0.png同样的事情,它不是真的命名Scroll0.png

相关问题