为了干净利落地将我的游戏移植到iPhone上,我尝试创建一个不使用NSTimer的游戏循环。
我在一些示例代码中注意到,如果使用NSTimer,则需要在开始时设置如下内容
self.animationTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(drawView) userInfo:nil repeats:YES];其中的drawView看起来像这样:
- (void)drawView
{
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
mFooModel->render();
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
}在使用这种技术时,mFooModel呈现得很好,但是我想创建自己的游戏循环来调用drawView,而不是让NSTimer每秒调用drawView 60次。我想要这样的东西:
while(gGameState != kShutDown)
{
[self drawView]
}不幸的是,当我这样做的时候,我得到的只是一个黑屏。这一切为什么要发生?有没有什么办法可以实现我在这里描述的东西?
我想避免NSTimer的原因是因为我想在游戏循环中进行物理和AI更新。我使用自己的时钟/计时器来记录已经过去的时间,这样我就可以准确地完成这项工作。渲染速度越快越好。我尝试使用this article中描述的一些技术
这是一个有点冲动的问题(在你写了一整天的代码之后,你会遇到一个卡住的问题,希望早上就能得到答案)
干杯伙计们。
发布于 2010-02-16 19:24:25
小心使用self作为displayLinkWithTarget的目标,手册上说“新构建的显示链接保留了目标”。马丁
https://stackoverflow.com/questions/1351234
复制相似问题