Использование SKTexture:withImageNamed в цикле for для загрузки анимаций вылетает после воспроизведения 30 + анимаций
Мой код ниже создает текстуру из имени изображения из файловых поисков в виде списка (например, Duck1_1,Duck1_2,Duck1_3 и т. Д.), Он циклически просматривает их, а затем добавляет их в изменяемый массив. Изменяемый массив затем используется для анимации с текстурами, сохраненными и воспроизведенными с помощью SKAction. Это хорошо работает для анимации до 30-40, затем происходит сбой и говорит, что слишком много файлов открыто, и он не может открыть файлы больше. Любые идеи о том, как это предотвратить? Спасибо
//loadPlistForAnimationWithNames function
NSMutableArray *animationToReturn = [NSMutableArray array];
for(NSString *frameNumber in animationFrameNumbers) {
NSString *frameName = [NSString stringWithFormat:@"%@%@.png",animationFramePrefix,frameNumber];
if(frameName!=nil)
[animationToReturn addObject:[SKTexture textureWithImageNamed:frameName]];
}
SKAction *action=nil;
action=[SKAction animateWithTextures:animationToReturn timePerFrame:animationDelay resize:NO restore:NO];
SKAction *repeatAction=nil;
repeatAction = [SKAction repeatAction:action count:1];
[animationToReturn removeAllObjects];
action=nil;
animationFrameNumbers=nil;
return repeatAction;
//Call to loadPlistForAnimationWithNames and run animation
SKAction *action=[animalObject loadPlistForAnimationWithNames:@"duckAnim1" andClassName:NSStringFromClass([self class])];
SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Duck1_1"];
sprite.position=CGPointMake(self.frame.size.width/2, self.frame.size.height/2);
sprite.size=self.frame.size;
[sprite setZPosition:3];
[self addChild:sprite];
[sprite runAction:action];
Вот ошибка XCode, которую я получаю, когда происходит сбой: 'ошибка = 24 (слишком много открытых файлов)
Обратный след:
* поток # 1: tid = 0x301c4, 0x00000001944ab270 libsystem_kernel.dylib__pthread_kill + 8, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
frame #0: 0x00000001944ab270 libsystem_kernel.dylib
__pthread_kill + 8 кадр #1: 0x0000000194549170 libsystem_pthread.dylibpthread_kill + 112
frame #2: 0x0000000194422b18 libsystem_c.dylib
прервать + 112 кадр #3: 0x00000001934b5418 libC++ abi.dylibabort_message + 116
frame #4: 0x00000001934d4b8c libc++abi.dylib
default_terminate_handler () + 304 frame # 5: 0x0000000193ce83c0 libobjc.A.dylib_objc_terminate() + 128
frame #6: 0x00000001934d1bb4 libc++abi.dylib
std:: __ terminate (void (*) ()) + 16 кадр #7: 0x00000001934d173c libC++ abi.dylib__cxa_rethrow + 144
frame #8: 0x0000000193ce8294 libobjc.A.dylib
objc_exception_rethrow + 44 кадра # 9: 0x0000000181ef5384 CoreFoundationCFRunLoopRunSpecific + 572
frame #10: 0x000000018b94b6fc GraphicsServices
GSEventRunModal + 168 кадров # 11: 0x0000000186af2f40 UIKitUIApplicationMain + 1488
* frame #12: 0x0000000100174fa0 Wild Noizes
main (argc = 1, argv = 0x000000016fd6f9d8) + 124 на main.m:16 кадр #13: 0x0000000194392a08 libdyld.dylib`start + 4