2013-04-15 1 views
0

Я пытаюсь загрузить несколько больших моделей в код и показать сцены. Как правило, на загрузку и показ сцены на экране требуется много времени, так как нужно извлечь массу ресурсов из модели подкачки. Итак, я подумал о том, чтобы заполнить первую сцену в основном потоке и оставить остальных в отдельном потоке. Но это сбой, когда я перемещаю код своей части в отдельный поток. Вот мой пример кода:Cocos3d: Сбой при загрузке сцены в отдельной теме или фоновом потоке:

-(void) loadFirstScene 
{ 
CC3PODResourceNode* podRezNode = [CC3PODResourceNode nodeWithName: @"FirstModel"]; 
podRezNode.resource = [IntroducingPODResource resourceFromFile: @"FirstModel.pod"]; 
podRezNode.shouldCullBackFaces = NO; 
podRezNode.location = cc3v(0.0, -10.0, 0.2); 
podRezNode.isTouchEnabled = YES; 
[self addChild: podRezNode]; 

[NSThread detachNewThreadSelector:@selector(loadScenesInThread) toTarget:self 
withObject:nil]; 
} 

// Crashing if i add the below function in separate thread or background thread 
-(void) loadScenesInThread 
{ 
CC3PODResourceNode* podRezNode = [CC3PODResourceNode nodeWithName: @"SecondModel"]; 
podRezNode.resource = [IntroducingPODResource resourceFromFile: @"SecondModel.pod"]; 

podRezNode.shouldCullBackFaces = NO; 
podRezNode.location = cc3v(0.0, -10.0, -5.0); 
podRezNode.isTouchEnabled = YES; 
[self addChild: podRezNode]; 

podRezNode = [CC3PODResourceNode nodeWithName: @"ThirdModel"]; 
podRezNode.resource = [IntroducingPODResource resourceFromFile: @"ThirdModel.pod"]; 

podRezNode.shouldCullBackFaces = NO; 
podRezNode.location = cc3v(0.0, -10.0, -5.0); 
podRezNode.isTouchEnabled = YES; 
[self addChild: podRezNode]; 

// .. do more 
} 

Может ли кто-нибудь вести меня, как бы я справился с такой ситуацией?

ответ

0

Вы не можете создавать или получать доступ к ресурсам OpenGL в потоке, отличном от потока, на котором был создан контекст OpenGL. Ваш единственный вариант - использовать любой метод async cocos2d или пример для загрузки текстур.

+0

Не могли бы вы указать мне, где я могу увидеть образец для метода «асинхронный»? – Getsy

+0

проверить CCTextureCache в api ref. Не знаю, предлагает ли cocos3d такие методы. – LearnCocos2D