我如何以可选速度实现独立的框架动作
How can I implement frame independent movement with selectable speed
我正在学习基本的框架独立运动,但是我在实施中有必要的需求。
现在,我正在搜索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
。因此,您的精灵应通过 deltaTime
和 gameSpeed
的倍数在Update
中移动。
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 独立读取-修改-写入顺序
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- catch框架有没有办法比较流或文件
- 带有多个独立参数的C++For循环
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 使用Qt框架在c ++类中创建API调用
- 如何在ECS框架中更新组件数据和通知系统
- VSCode IntelliSense无法识别SDL框架的SDL_image扩展库
- 用于C++的静态二进制检测或二进制重写工具和框架
- GoogleMock是否仍然打算与任何测试框架一起使用?
- 带有框架的 QGraphicsTextItem 的 QPropertyAnimation 会使文本抖动
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 通过命令行在Visual Studio中编译单个独立文件
- 如何将独立的 c 应用程序组合到 c++ 应用程序中?
- 修改生成文件以简化框架 #include 路径
- 我们能否在stm32f中使用硬件定时器控制两个独立的进程
- 无敌框架并受到伤害等级
- 我如何以可选速度实现独立的框架动作
- 两者的框架:Web和独立应用程序