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

时间:2014-04-09 13:10:41

标签: ios objective-c ios7 opengl-es game-center

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

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

基本游戏循环结构如下;

GameAppDelegate - 它包含UIView glView,并在applicationDidFinishLaunching中启动它,如下所示;

[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 gameController;

GKGameCenterViewController* gameCenterViewController = [[GKGameCenterViewControler alloc] init];
gameCenterController.viewState = GKGameCenterViewControllerStateLeaderboards;
[self presentViewController:gameCenterController animated:NO completion:nil];

代码运行,但没有显示任何内容,游戏循环只会继续。为什么不呢?

修改

尝试通过NSTimer和CADisplayLink触发主游戏循环但没有成功,presentViewController仍然没有出现。

1 个答案:

答案 0 :(得分:0)

好的,问题是主线程始终忙于while(true)

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

在目前的情况下,你需要创建绘图循环,它有两种不同的方式:
1.创建CADisplayLink - 更好,here you can grab code

self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(mainGameLoop)];
[displayLink setFrameInterval:2];
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

2。简单用间隔创建NSTimer,每次迭代都会调用mainGameLoop,但它不是那么完美的解决方案

在这里你可以找到一些有趣的,Jeff Lamarche有很多很好的教程和解释 https://github.com/jlamarche/iOS-OpenGLES-Stuff
http://iphonedevelopment.blogspot.ie/