gpt4 book ai didi

objective-c - 为什么 Cocoa 游戏避免使用 Grand Central Dispatch 来创建计时器?

转载 作者:太空狗 更新时间:2023-10-30 03:26:07 25 4
gpt4 key购买 nike

我在互联网上看了很多关于在 Cocoa 中创建游戏循环的讨论。我见过的大多数游戏循环都使用 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,
0, 0, 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;
}

最佳答案

这并没有真正回答您的问题,但是常规计时器并不是完美的游戏循环解决方案(尽管它可能是最简单的解决方案)。有 a very good article about game loop programming和两个 previous questions关于 SO 上的游戏循环可能会给你更好的想法。

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

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

这会给你最大的平滑度。阅读链接的资源以获取更多信息,恕我直言,编写一个漂亮的线程游戏循环并不难,而且会产生很大的不同。

关于objective-c - 为什么 Cocoa 游戏避免使用 Grand Central Dispatch 来创建计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4983099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com