我在iPhone上编写游戏.我目前正在使用NSTimer来触发我的游戏更新/渲染.这个问题是(在分析之后)我似乎在更新/渲染之间失去了很多时间,这似乎主要与我插入NSTimer的时间间隔有关.
所以我的问题是使用NSTimer的最佳替代方案是什么?
请回答一个替代方案.
你可以通过线程获得更好的性能,尝试这样的事情:
- (void) gameLoop { while (running) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; [self renderFrame]; [pool release]; } } - (void) startLoop { running = YES; #ifdef THREADED_ANIMATION [NSThread detachNewThreadSelector:@selector(gameLoop) toTarget:self withObject:nil]; #else timer = [NSTimer scheduledTimerWithTimeInterval:1.0f/60 target:self selector:@selector(renderFrame) userInfo:nil repeats:YES]; #endif } - (void) stopLoop { [timer invalidate]; running = NO; }
在renderFrame
方法中准备帧缓冲区,绘制帧并在屏幕上显示帧缓冲区.(PS 关于各种类型的游戏循环及其优缺点,有一篇很棒的文章.)