Ios 无法显示OpenGL游戏循环中的游戏中心排行榜

Ios 无法显示OpenGL游戏循环中的游戏中心排行榜,ios,objective-c,ios7,opengl-es,game-center,Ios,Objective C,Ios7,Opengl Es,Game Center,我有一个OpenGL ios应用程序,它是在71squared.com教程中使用的框架之上构建的 所有视图、状态和控件都在应用程序中进行状态管理,并且只有一个UIViewController 基本的游戏循环结构如下: [glView performSelectorOnMainThread:@selector(mainGameLoop) withObject:nil waitUntilDone:NO]; GameAppDelegate-它持有UIView glView,并在Application

我有一个OpenGL ios应用程序,它是在71squared.com教程中使用的框架之上构建的

所有视图、状态和控件都在应用程序中进行状态管理,并且只有一个UIViewController

基本的游戏循环结构如下:

[glView performSelectorOnMainThread:@selector(mainGameLoop) withObject:nil waitUntilDone:NO];
GameAppDelegate-它持有UIView glView,并在ApplicationIDFinishLaunching中启动它,如下所示

[glView performSelectorOnMainThread:@selector(mainGameLoop) withObject:nil waitUntilDone:NO];
GLView包含mainGameLoop方法,它是从UIView派生的

主游戏循环执行以下操作,以及创建然后释放自动释放池和管理帧计数器

while(true)
{
[gameController updateScene];
[self drawView];
}
gameController是UIViewController派生的类

drawView执行以下操作:

[EAGLContext setCurrentContext:context];
glBindFrameBufferOES(GL_FRAMEBUFFER_OES, viewFrameBuffer);
[gameController renderScene];

glBindRenderBufferOES(GL_RENDERBUFFER_OES, viewRenderBuffer);
[context presentRenderBuffer:GL_RENDERBUFFER_OES];
好的。。。这一切都很好

然而,我正试图展示一个游戏中心排行榜,它什么都不做。我有一种感觉,当排行榜呈现时,我可能需要管理状态,并在渲染循环中执行一些不同的操作。以下代码是我的UIViewController游戏控制器

GKGameCenterViewController* gameCenterViewController = [[GKGameCenterViewControler alloc] init];
gameCenterController.viewState = GKGameCenterViewControllerStateLeaderboards;
[self presentViewController:gameCenterController animated:NO completion:nil];
代码运行,但没有显示任何内容,游戏循环只是继续。为什么不呢

编辑:


尝试通过NSTimer和CADisplayLink触发主游戏循环,但未成功,presentViewController仍不显示。

好的,您的问题是主线程总是忙着执行任务

我想建议你下次使用GLKit。它非常简单,Xcode中的模板拥有简单应用程序所需的一切

在当前情况下,您需要为绘图创建循环,它有两种不同的方式: 1.创建CADisplayLink-哪一个更好

二,。使用interval创建简单的NSTimer,它将在每次迭代时调用mainGameLoop,但这并不是完美的解决方案

在这里你可以找到一些有趣的东西,杰夫·拉马尔奇有很多很好的教程和解释

您的updateScene代码是否真的存在错误?这也许就是为什么你看不到排行榜,因为它需要完整的主线。@SAKrisT建议一个答案/备选方案如何?如果我知道这个问题,为什么我要将它发布到StackOverflow上?这不是一个重复的问题,因为答案是相同的。那么NSTimer会取代while true循环吗?我希望实现CADisplayLink,但选择器是主游戏循环?主游戏循环包含whiletrue循环。那么这会有什么不同呢?你需要删除,尽管我确实使用了计时器,因为我的项目中已经有了它的实现,排行榜仍然没有显示。好的。。。我现在已经尝试使用CADisplayLink触发主游戏循环,并且效果良好。当试图调用presentViewController来显示游戏中心排行榜时,动画变得非常缓慢,但结果完全相同。所有3种游戏循环方法的结果相同。