首先,我想为我的近似英语道歉,因为我是法国人。我目前正在使用LWJGL在java中进行实时游戏。 我对游戏循环有一些疑问:
谢谢你的时间!
答案 0 :(得分:0)
这是个好主意吗?单独的线程是相当高级的东西,我认为没有理由开始多线程。到目前为止,我所使用的所有手机游戏都不需要多线程,即使它们是“实时”的。硬核PC和控制台游戏是多线程真正开始发挥作用的地方。如果感兴趣,请点击此处关于该主题的最新演讲的链接:http://archive.assembly.org/2011/seminars/adventures-in-multithreaded-gameplay-coding。
如果物理学不能一次性处理,这听起来会引起一些奇怪的事情。对此不确定。将已经更新的对象与另一个时间的对象碰撞到另一个位置,例如,纠正这种情况可能会成为问题?快速移动的碰撞可能需要细分,这可能就是为什么你有单独的更新线程,但为什么不将它们全部计算为同时发生?
'可变时间步长'和'固定时间步长'是可用于渲染的选项。目前大多数游戏似乎都选择了30 fps的固定时间步长。渲染必须保持在极限之下,因此不需要追赶。 变时间步的一个问题是您被迫将deltaTime传递给所有与时间相关的区域。固定的时间步长很方便,因为你可以假设你以30 fps的速度运行,并且在任何地方都使用该值。据我所知,目前这是一种首选方法。
答案 1 :(得分:0)
虽然这个问题已经有几年了......
AFAIK,
渲染通常在分离的处理器 - GPU中完成,因此它们已经是一个独立的线程。但是,绘图命令必须在发送到GPU之前由图形驱动程序(在CPU中运行)处理,并且可以通过多线程保存此处理。无论如何,在这种情况下,您负责管理逻辑和呈现线程之间的同步。
一般来说,游戏都是关于对象之间的交互,并且将状态图划分为完全分离的部分非常困难。结果,整个游戏状态通常变成单个图形,并且该图形在渲染时不能被更新。在这种情况下,您可以通过多线程获益。
如果你可以保留一个单独的不可变数据进行渲染,那么你可以从分离的线程渲染中获得一些好处。但除此之外,我不推荐它。
此外,如果你真的想要一个实时游戏,你应该考虑GC。 GC相关的性能问题通常是制作实时内容的最大障碍。