2013-04-15 33 views
0

我试图在代码中加载几个大型模型并显示场景。一般来说,在屏幕上加载和显示场景需要很长时间,因为它需要从一个pod模型中提取大量资源。 所以,我想在主线程中填充第一个场景,并在其他线程中保留其他场景。但是,当我将我的零件代码移动到单独的线程时,它正在崩溃。这里是我的示例代码: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资源。唯一的选择是使用cocos2d提供的任何“异步”方法,或者用于加载纹理的示例。

+0

您能否指出我在哪里可以看到“异步”方法的示例? – Getsy

+0

在api文件中检查CCTextureCache。不知道cocos3d是否提供这样的方法。 – LearnCocos2D

相关问题