客观c – 为什么可可游戏避免大中央派驻创建计时器?

前端之家收集整理的这篇文章主要介绍了客观c – 为什么可可游戏避免大中央派驻创建计时器?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在互联网上看到一个很大的交易,讨论在可可中创建游戏循环.我看过的大部分游戏循环使用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 programmingprevious questions可能会给你更好的想法.

主要目的是在循环中的单独线程上运行游戏循环,并根据迭代之间的时间重新计算游戏模型:

- (void) gameLoop
{
    while (running) {
        CFAbsoluteTime now = CFAbsoluteTimeGetCurrent();
        CFTimeInterval deltaTime = now - lastTime;
        [self updateModelWithDelta:deltaTime];
        [self renderFrame];
        lastTime = now;
    }
}

这将给你最大的光滑度.阅读链接的来源获取更多信息,编写一个很好的线程游戏循环并不困难,并使其有很大的不同.

原文链接:https://www.f2er.com/c/116442.html

猜你在找的C&C++相关文章