我正在学习Libgdx并且在渲染方法期间有一些关于更新我的游戏逻辑的问题.
理想情况下,我希望保持游戏逻辑和渲染分离.这样做的原因是如果我在系统上拥有高FPS,我的游戏循环将"更快地"运行.
我正在寻找的是保持经验不变和可能限制我的更新..如果任何人可以指向我如何a)通过DeltaTime限制我的渲染更新的教程b)通过Deltatime限制我的游戏逻辑更新.
谢谢 :)
在重新阅读你的问题之后,我认为你缺少的技巧(基于你在更高刷新系统上运行的评论会导致你的游戏逻辑运行得更快),你实际上是根据"delta"来扩展你的更新"传递给渲染的时间.AndreiBârsan在上面提到了这一点,但我想我会详细说明如何使用delta.
例如,在我的游戏的render()中,我首先调用我的entityUpdate(delta),它更新并移动游戏中的所有对象,按照时间"delta"行进的距离进行缩放(它不会渲染它们,只是移动他们的位置变量).然后我调用entityManageCollisions(delta),它解决了由更新引起的所有冲突,然后我最终调用entityDraw(batch,delta),它使用delta来获取精灵动画的正确帧,并实际绘制屏幕上的所有内容.
我使用实体/组件/系统模型的变体,所以我通常处理我的所有实体,而我上面提到的那些方法调用本质上是"系统",它们对实体具有某些组件组合.
因此,所有这一切,将delta(传递给render()的参数)传递到所有逻辑中,因此您可以根据自上次调用以来经过的时间量来缩放(移动实体适当的距离).这要求您根据实体的单位/秒来设置速度,因为您传递的值会缩短它,只需几分之一秒.一旦你做了几次,并试验结果,你将处于良好的状态.
另请注意:这会让您在交互式调试会话中感到疯狂,因为增量计时器会自上次渲染调用以来累积时间,导致您的实体飞越整个屏幕(以及更远 - 为您测试这些边界!),因为它们通常得到亚秒级的更新,但可能最终会超过30秒(或者你花了多长时间看着踩过调试器的东西),所以在我的render()的最顶端,我有一条线说delta = 0.016036086f;(那个数字是来自我的开发工作站的示例devla,并且似乎给出了不错的结果 - 您可以通过在测试运行期间将其写入控制台来捕获视频系统的典型增量,并使用该值代替,如果您愿意)我评论out用于部署的构建,但在调试时保留未注释,因此每个框架都会向前移动一致的数量,无论我花多长时间在调试器中查看内容.
祝好运!
| 归档时间: |
|
| 查看次数: |
8900 次 |
| 最近记录: |