我如何以可选速度实现独立的框架动作

How can I implement frame independent movement with selectable speed

本文关键字:独立 框架 实现 速度      更新时间:2023-10-16

我正在学习基本的框架独立运动,但是我在实施中有必要的需求。

现在,我正在搜索C 代码,但是我需要一个完整的示例,可以使速度提高。不是逐渐增加,而只是更快地移动我的精灵的能力。由于没有很多示例,因此我必须将C 代码转换为VB .NET。因此,让我清楚一下 ->

我有一个简单的gameloop。在Gameloop中,我有两个呼叫函数

update()Render()

我理解,对于update()函数,我应该放置一个deltatime参数。所以应该是

update(Deltatime为double)

由于这是显示网络上大多数示例的方式,所以我只是复制了这个想法,但我还没有独立的框架。

如何设置此并调用渲染函数。

请记住,如果它有效,那很好 - 我以前剪切并粘贴了一个不同的例子,但是没有办法提高移动精灵的速度。我什至不知道从哪里开始?

请注意,如果您只有C 代码,我会尽力翻译它,因此对我来说是可以接受的。

我不会给您代码,因为我很肯定您将能够使用适当的描述来解决此问题,但是我将很乐意解释如何在没有帧速率依赖性的情况下移动精灵。

正如您所说的,您已经将Delta时间传递到了该功能。
三角洲时间是它在现在和最后一次调用函数的时间(帧)的时间。
当您移动精灵时,您可能会以特定数量的像素来移动它,而不是每帧执行此操作,而是应将像素范围乘以三角洲时间。

这将成为一个非常简单的公式:
DetlaTime * TheNumberOfPixelsToMoveInASecond
如果您用10个mul,那么精灵将在一秒钟内移动10像素。用100来mul,它将在一秒钟内移动100像素。

deltaTime的想法是让您的游戏以游戏玩法的感知速度不变的方式运行,无论运行游戏的机器和环境的速度多快或速度。

您可能会注意到,如果您在硬件上为旧硬件设计的一些编码不佳的游戏,游戏玩法的变化太快了,并且在那些快速机器上变得无法播放而没有故意减慢事情的速度。实际上,有一些减速的实用程序来解决该问题,例如Mo'slow和Cpukiller。这是因为这些旧游戏的编码方式是根据已经过去了的时间,每帧的恒定数量而不是可变数量的变化。

因此,为避免此问题,您可以按照deltaTime的倍数来移动所有精灵。无论机器/环境的速度如何,都会给您一致的速度感。

现在,如果您希望在要允许用户更快地制作游戏的基础上的可调节速度,那么您在deltaTime的顶部引入了第二个变量,您也将其乘以gameSpeed。因此,您的精灵应通过 deltaTimegameSpeed的倍数在Update中移动。