我在互联网上看到一个很大的交易,讨论在可可中创建游戏循环.我看过的大部分游戏循环使用NSTimer每60秒钟触发一次事件.为什么似乎没有使用Grand Central Dispatch的示例,如下面Apple开发者文档的源代码.有没有一个我不知道的问题?
dispatch_source_t CreateDispatchTimer(uint64_t interval,uint64_t leeway,dispatch_queue_t queue,dispatch_block_t block) { dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,queue); if (timer) { dispatch_source_set_timer(timer,dispatch_walltime(NULL,0),interval,leeway); dispatch_source_set_event_handler(timer,block); dispatch_resume(timer); } return timer; }
解决方法
这不是真的回答你的问题,但一个常规的计时器不是完美的游戏循环解决方案(尽管它可能是最简单的).有关于SO的游戏循环有
a very good article about game loop programming和
previous
questions可能会给你更好的想法.
主要目的是在循环中的单独线程上运行游戏循环,并根据迭代之间的时间重新计算游戏模型:
- (void) gameLoop { while (running) { CFAbsoluteTime now = CFAbsoluteTimeGetCurrent(); CFTimeInterval deltaTime = now - lastTime; [self updateModelWithDelta:deltaTime]; [self renderFrame]; lastTime = now; } }