java - 渲染中的 Libgdx 游戏逻辑?

标签 java libgdx

我正在学习 Libgdx,并且有一些关于在渲染方法期间更新我的游戏逻辑的问题..

理想情况下,我希望将游戏逻辑和渲染分开。这样做的原因是,如果我在系统上有高 FPS,我的游戏循环会“运行”得更快。

我正在寻找的是保持体验不变,并可能限制我的更新..如果有人能给我指点一个关于如何做的教程 a) 通过 DeltaTime 限制我的渲染更新 b) 通过 Deltatime 限制我的游戏逻辑更新。

谢谢你:)

最佳答案

在重新阅读您的问题后,我认为您缺少的技巧(根据您的评论,即在更高刷新率的系统上运行会导致您的游戏逻辑运行得更快),是您实际上根据传递给渲染的“增量”时间。 Andrei Bârsan 在上面提到了这一点,但我想我会详细说明如何使用 delta。

例如,在我的游戏的 render() 中,我首先调用我的 entityUpdate(delta),它更新和移动我游戏中的所有对象,这些对象按时间“delta”移动的距离缩放(它不渲染它们,只是移动他们的位置变量)。然后我调用 entityManageCollisions(delta),它解决了由更新引起的所有碰撞,最后我调用了 entityDraw(batch, delta),它使用 delta 为 sprite 动画获取正确的帧,并实际在屏幕上绘制所有内容。

我使用 Entity/Componet/System 模型的一个变体,所以我一般地处理我的所有实体,我上面提到的那些方法调用本质上是“系统”,它们作用于具有特定组件组合的实体。

所以,总而言之,将 delta(传递给 render() 的参数)传递到您的所有逻辑中,这样您就可以根据自最后一次通话。这要求您根据单位/秒为您的实体设置速度,因为您传递的是一个值以按几分之一秒来缩放它们。一旦你这样做了几次,并对结果进行了试验,你就会处于良好的状态。

另请注意:这会让您在交互式调试 session 中发疯,因为增量计时器自上次渲染调用以来不断累积时间,导致您的实体飞过整个屏幕(甚至超出 - 为您测试这些边界!)因为它们通常会获得亚秒级的更新,但最终可能会超过 30 秒(或者无论你花多长时间查看调试器中的东西),所以在我的 render() 的最顶部,我有一行说 delta = 0.016036086f;(该数字是来 self 的开发工作站的示例 detla,并且似乎给出了不错的结果——您可以通过在测试期间将其写入控制台来捕获视频系统的典型增量运行,并使用该值代替,如果你喜欢的话)我注释掉要部署的构建,但在调试时保留未注释,所以每一帧都会使游戏向前移动一个一致的量,不管我花了多长时间看东西在调试器中。

祝你好运!

关于java - 渲染中的 Libgdx 游戏逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14247613/

相关文章:

java - 具有构造函数的类的依赖注入(inject)需要有关登录 SecurityContext 的用户的信息

java - 尽管 Java 版本相同,但仍出现 UnsupportedClassVersionError

android - 如何在android中将libgdx添加为 subview

java - 我已经编写了这个成员(member)资格类(class),我如何创建一个方法来查找给予成员(member)的特定ID?

java - 没有检查 JCheckBox 就触发了 MouseListener

Java 执行流程 - 重写的方法比构造函数先执行

java - libGdx 与 Box2D 装载机自行车车轮接头

java - 在一个 Json 皮肤中使用多种字体

java - Android libGDX 在启动时随机崩溃

java - 使用 "batch"绘制的文本被使用 "renderer"绘制的矩形隐藏