Animation SKAction会导致应用程序在执行多个动画时崩溃,每个动画都有(8-10)个图像 8-10个大图像 使用SKTexture在for循环中使用textureWithImageNamed加载每个图像 将这些纹理放入一个可变数组中 使用SKAction设置阵列中纹理的动画 按下屏幕上的按钮可以播放这些动画

Animation SKAction会导致应用程序在执行多个动画时崩溃,每个动画都有(8-10)个图像 8-10个大图像 使用SKTexture在for循环中使用textureWithImageNamed加载每个图像 将这些纹理放入一个可变数组中 使用SKAction设置阵列中纹理的动画 按下屏幕上的按钮可以播放这些动画,animation,memory-management,memory-leaks,sprite-kit,skaction,Animation,Memory Management,Memory Leaks,Sprite Kit,Skaction,使用9个Buton(使用相同代码的9个不同动画)播放30-40次后,应用程序崩溃,打开的文件太多 for(NSString *frameNumber in animationFrameNumbers) { NSString *frameName = [NSString stringWithFormat:@"%@%@",animationFramePrefix,frameNumber];//filename texture = [SKTexture textureWithImag

使用9个Buton(使用相同代码的9个不同动画)播放30-40次后,应用程序崩溃,打开的文件太多

for(NSString *frameNumber in animationFrameNumbers)
{
   NSString *frameName = [NSString
   stringWithFormat:@"%@%@",animationFramePrefix,frameNumber];//filename
   texture = [SKTexture textureWithImageNamed:frameName];
   [animationToReturn addObject:texture];  //add texture to NSMutable Array
}
   SKAction *action=nil;
   action=[SKAction animateWithTextures:animationToReturn
   timePerFrame:animationDelay resize:NO restore:NO];//action with textures
   repeatAction = [SKAction repeatAction:action count:3];//repeat action        
   [animationToReturn removeAllObjects];
   return repeatAction;  //return action to be used
//另一个类调用上述代码

       SKAction *action=[animalObject 
       loadPlistForAnimationWithNames:@"polarBearAnim1" andClassName:NSStringFromClass([self class])];  //load animation returned into action
       SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"PolarBear1"];
       sprite.position=CGPointMake(self.frame.size.width/2, self.frame.size.height/2.5);
       [sprite setZPosition:3];
       [self addChild:sprite];
       [sprite runAction:action]

      [sprite runAction:[SKAction sequence: @[action]] completion:^{
      NSLog(@"Animation complete")
     ;}];
事故日志: 2015-07-06 21:24:13.302野生黑熊[3066:679465]读取plist:dogsecene.plist时出错 7月6日21:24:13 Erics iPhone Wild Noizes[3066]:ImageIO:CGImageReadCreateDataWithMappedFile'open'failed'/private/var/mobile/Containers/Bundle/Application/B04510BD-B99F-4F93-A791-D486B25712E4/Wild Noizes.app/Dog1_1.png 错误=24(打开的文件太多) 7月6日21:24:13 Erics iPhone Wild Noizes[3066]:ImageIO:CGImageReadCreateDataWithMappedFile'open'failed'/private/var/mobile/Containers/Bundle/Application/B04510BD-B99F-4F93-A791-D486B25712E4/Wild Noizes.app/Dog1_1.png 错误=24(打开的文件太多) 2015-07-06 21:24:13.325 Wild Noizes[3066:679465]*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*-[\uu NSPlaceholderArray initWithObjects:count:]:尝试从对象[0]插入nil对象” ***第一次抛出调用堆栈: (0x1859382d8 0x19760c0e4 0x18581ef70 0x18582b200 0x100167c58 0x18a20b770 0x18a223004 0x100157b20 0x18a22092c 0x18a3e488c 0x18a3ddefc 0x18a3b1120 0x18a6522b8 0x18a3af634 0x1858f0240 0x1858ef4e4 0x1858ed594 0x1858192d4 0x18f26f6fc 0x18a416f40 0x1001ccec8 0x197cb6a08) libc++abi.dylib:以NSException类型的未捕获异常终止
(lldb)

首先:将“纹理”设置为变量,而不是在循环中创建纹理的新实例。为什么?第二:您似乎创建了一个动画序列,运行它,然后通过清除数组再次销毁它(这是非常低效的)。为什么?谢谢你的回复。我以前确实在循环中使用sktexture作为变量,并且没有清除数组。但我添加这些只是为了看看是否对撞车有任何影响,而没有。因此,即使有你的建议,该应用程序也会在播放了大约45-50个动画后崩溃。每次都会有不同的动画通过上面的代码路径。如果您可以发布崩溃日志,这会有所帮助。另外,您是否设置了“所有异常”断点以查看崩溃发生的确切位置?发布了崩溃日志,但对于“所有异常”断点没有任何运气。首先:您将“纹理”设置为变量,而不是在循环中创建纹理的新实例。为什么?第二:您似乎创建了一个动画序列,运行它,然后通过清除数组再次销毁它(这是非常低效的)。为什么?谢谢你的回复。我以前确实在循环中使用sktexture作为变量,并且没有清除数组。但我添加这些只是为了看看是否对撞车有任何影响,而没有。因此,即使有你的建议,该应用程序也会在播放了大约45-50个动画后崩溃。每次都会有不同的动画通过上面的代码路径。如果您可以发布崩溃日志,这会有所帮助。另外,您是否设置了“所有异常”断点以查看崩溃发生的确切位置?发布了崩溃日志,但并没有发现“所有异常”断点。