2014-04-09 80 views
1

我有我已經建在教程中使用的框架的頂部上71squared.com無法顯示的OpenGL遊戲循環遊戲中心排行榜

OpenGL的iOS應用程序的所有意見,規定,控制是國家管理在應用程序中,並且只有一個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]; 

OKAY ...這一切都很好。

但是,我試圖顯示一個遊戲中心排行榜,它只是沒有做任何事情。我有一種感覺,我可能需要管理狀態,並在呈現排行榜時在呈現循環中做一些不同的事情。以下代碼是我的UIViewController gameController;

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

代碼運行,但不顯示任何內容,遊戲循環只是繼續。爲什麼不?

編輯:

試圖通過二者的NSTimer和CADisplayLink沒有成功觸發主遊戲循環,presentViewController仍然沒有出現。

+0

你的代碼中updateScene是否真的有'while(true)'?這也許就是爲什麼你看不到排行榜,因爲它需要完整的主線程。 – SAKrisT

+0

@SAKrisT如何提出答案/替代方案?如果我知道這個問題,我爲什麼要將它發佈到StackOverflow? – AnthonyBlake

+0

它不是一個重複的問題,因爲答案是相同的。 – AnthonyBlake

回答

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每次迭代,但它不是那麼完美的解決方案

在這裏你可以找到一些有趣的,傑夫·拉馬什有很多很好的教程和說明
https://github.com/jlamarche/iOS-OpenGLES-Stuff
http://iphonedevelopment.blogspot.ie/

+0

那麼NSTimer會替換while循環嗎? – AnthonyBlake

+0

我期待實現CADisplayLink,但選擇器是主遊戲循環嗎?主遊戲循環包含while(true)循環。那麼這又會如何呢? – AnthonyBlake

+0

你需要刪除while(true) – SAKrisT