为了尝试为我正在开发的iPhone游戏创建一个加载栏(使用Cocos2D),我想使用多线程方法。
一个线程显示一个加载屏幕并运行主应用程序事件循环,而一个新线程在后台(通过spriteWithFile)并将它们添加到一个层)中静默地加载所有Sprite。
我使用NSThread的detachNewThreadSelector方法创建新线程(它通过performSelectorOnMainThread).向主线程发送加载状态的更新)
我面临的问题是,新线程中的任何spriteWithFile调用(例如在OpenGL方法中找到的调用)都会出现总线错误或某种类型的内存访问错误。我假设这是因为两个线程同时尝试进行OpenGL调用,或者新线程不知道OpenGL上下文。
要允许多个线程使用Cocos2D-iPhone在OpenGL上调用iPhone,必须做些什么。
发布于 2009-07-15 22:57:15
我也想这么做。
我从这条线开始。
PS:这个答案很古老,现在我不确定异步纹理加载是否像以前那样有用,因为iOS5通过CVOpenGLESTextureCaches添加了“免费”纹理上传。当然,您仍然可以(&应该)将资产加载到第二个线程中,但是给该线程一个EAGLContext现在似乎不那么必要了。
发布于 2010-01-19 13:22:17
对于记录而言,新线程需要执行以下两行代码才能从并发线程中使用OpenGL API:
EAGLContext *k_context = [[[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1 sharegroup:[[[[Director sharedDirector] openGLView] context] sharegroup]] autorelease];
[EAGLContext setCurrentContext:k_context];现在,addImageAsync方法已经过时,该方法是由为您加载异步纹理的TextureMgr类在Cocos2D 0.8.x中提供的。
发布于 2009-07-16 00:35:23
苹果对于多线程OpenGL 这里有一些很好的指导方针。
https://stackoverflow.com/questions/1133123
复制相似问题