2013-04-15 1 views
0

J'essaie de charger plusieurs gros modèles dans le code et d'afficher les scènes. En règle générale, le chargement et l'affichage de la scène à l'écran prennent beaucoup de temps car il faut extraire beaucoup de ressources d'un modèle de pod. Donc, j'ai pensé à peupler la première scène du fil principal et les autres restants dans un fil séparé. Mais, il s'écrase quand je déplace mon code de pièce dans un fil séparé. Voici mon exemple de code:Cocos3d: Blocage lors du chargement de la scène dans un fil séparé ou un fil d'arrière-plan:

-(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 
} 

Quelqu'un pourrait me guider comment pourrais-je gérer une telle situation?

Répondre

0

Vous ne pouvez pas créer ou accéder à des ressources OpenGL dans un thread différent du thread sur lequel le contexte OpenGL a été créé. Votre seule option est d'utiliser n'importe quelle méthode "async" offerte par cocos2d, ou un exemple de chargement de textures.

+0

Pouvez-vous me signaler où je peux voir l'échantillon pour la méthode "async"? – Getsy

+0

vérifier CCTextureCache dans l'API réf. Aucune idée si cocos3d offre de telles méthodes. – LearnCocos2D