如何使不同电脑的速度(游戏帧率)相同?

2024-01-08

在我们学校,将游戏作为课堂项目来实现我们从计算机科学课程中学到的不同概念是很常见的。现在我们在我们的机器上开发了我们的游戏,一切似乎都工作正常,游戏速度正常等等。现在,当我们尝试在学校的计算机上测试我们的游戏时,或者当我们的教授在他自己的计算机上测试我们的游戏时,假设他的计算机比我们开发游戏的设备强大得多,游戏的速度就会发生巨大的变化。 ..在大多数情况下,游戏动画的发生速度比预期的要快。那么我的问题是,如何在游戏应用程序中防止此类问题?是的,我们使用 Java。在我们构建的大多数应用程序中,我们通常使用被动渲染作为渲染技术。提前tnx!


您不应该依赖游戏逻辑的渲染速度。相反,跟踪从游戏中最后一个逻辑步骤到当前步骤所花费的时间。然后,如果花费的时间超过一定量,则执行一个游戏步骤(在极少数情况下,计算机速度太慢以至于应该发生两个步骤,您可能需要想出一个智能解决方案来确保游戏不会不落后)。

这样,游戏逻辑与渲染逻辑是分开的,您不必担心游戏改变速度取决于垂直同步是否打开或关闭,或者计算机是否比您的速度慢或快。

一些伪代码:

// now() would be whatever function you use to get the current time (in
// microseconds or milliseconds).
int lastStep = now();
// This would be your main loop.
while (true) {
    int curTime = now();

    // Calculate the time spent since last step.
    int timeSinceLast = curTime - lastStep;

    // Skip logic if no game step is to occur.
    if (timeSinceLast < TIME_PER_STEP) continue;

    // We can't assume that the loop always hits the exact moment when the step
    // should occur. Most likely, it has spent slightly more time, and here we
    // correct that so that the game doesn't shift out of sync.
    // NOTE: You may want to make sure that + is the correct operator here.
    //       I tend to get it wrong when writing from the top of my head :)
    lastStep = curTime + timeSinceLast % TIME_PER_STEP;

    // Move your game forward one step.

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使不同电脑的速度(游戏帧率)相同? 的相关文章

随机推荐

  • 找不到 gfortran 4.8 来构建包

    我正在尝试安装deldirR 中的包通过install packages deldir type source 但收到以下错误消息 这是 OSX Mavericks installing source package deldir pack
  • 基于日期的条件格式

    尝试在 Excel 中设置工作时间卡 将日期放在工作表的左侧 2011 年 1 月 1 日星期五 2011 年 1 月 2 日星期六 2011 年 1 月 3 日星期日 等等 我想将周末日期的行灰显 如下所示 2011 年 1 月 1 日星
  • 您是否可以在 XML 中声明和使用变量而不使用 XSL 来转换/解析 XML

    假设您想要在应用程序中读取一个 XML 元素 但是您有多个环境 其中依赖文件的路径可能会发生变化
  • Python _winreg 的问题

    我正在尝试访问 Windows 注册表 在 Python 中 以使用以下命令查询键值 winreg我无法让它工作 以下行返回一个 WindowsError 指出 系统找不到指定的文件 key winreg OpenKey winreg HK
  • Selenium - “Firefox 已经在运行”错误

    我们正在使用 selenium 运行一些测试 为此 我们有专用的 Windows XP VM 每个 VM 上都有一个 selenium RC 服务器 并且该 VM 上没有运行其他进程 我们为每个测试打开和关闭一个 Selenium 会话 测
  • FSEvents C++ 示例

    我需要为 Mac 中的文件夹创建 FSEvents 观察器 我对 C 很熟悉 有没有办法在 C 代码中而不是 Objective C 中获取 FSEvents 通知 是否有一些示例代码可以开始以及我需要包含的任何库 我已经在这个页面了 ht
  • 当应用程序是代理时,如何在 Mac OS X 中取消关闭?

    我有一个 Java 应用程序 需要从 Dock 中隐藏 并且还需要能够中断 这就是我处理关闭的方式 import com apple eawt AppEvent QuitEvent import com apple eawt QuitHan
  • 如何在 SwiftUI 中为 WKWebView 创建浏览器选项卡

    我正在尝试构建一个新的选项卡功能 但我不太确定如何实现这一点 我在设置新的或以前的 WKWebView 时遇到问题 如果 url 无效 我如何显示 errorView 这是我到目前为止所拥有的 编辑 我不太确定如何初始化或如何创建 inva
  • 为什么 Cabal 不超链接我的来源?

    cabal version cabal install version 1 22 2 0 using version 1 22 2 0 of the Cabal library cabal install haddock hyperlink
  • Android 中用于标准化电话号码的任何 API

    android 中有没有可以标准化电话号码的API 例如当我查找电话号码时 有时是2223334444有时是 2223334444 谢谢 Android 有专门的类用于此目的 android telephony PhoneNumberUti
  • 从请求范围的 CDI Bean 获取对会话范围的 CDI bean 的访问

    我已经有一个会话范围的 CDI bean 它保存当前登录的用户数据 现在 从另一个请求范围内 我想访问这个 bean 以获取一些数据 我有一些操作要做 这取决于用户登录 这是我需要的唯一信息 如何访问它 AccountBean java N
  • 如何阻止 God 留下陈旧的 Resque 工作进程?

    我试图了解如何监控 resque 工作人员特拉维斯 ci https github com travis ci travis ci以这样的方式与上帝合作 通过上帝停止 resque 手表不会留下陈旧的工作进程 下面我讨论的是工作进程 而不是
  • 使用 PHP 解码 amf3 对象

    我的闪光代码 var request new URLRequest http localhost test php request method URLRequestMethod POST var data new URLVariables
  • 如何在相机中启动视频图标

    我正在尝试通过启动一个应用程序adb在我的安卓手机中 我努力了adb getevent 但它转储了很多事件 我怎样才能知道我需要哪一个 还有其他方式可以启动该应用程序吗 我希望推出相机的视频部分 我能够通过 adb 启动相机 am star
  • 如何在 Azure Cosmos DB 中构建关系?

    我在 cosmos 的同一集合中有两组数据 一组是 帖子 另一组是 用户 它们由用户创建的帖子链接 目前我的结构如下 user document id 123 postIds id1 id2 post document id id1 own
  • fs.readFileSync() 函数无法按预期工作

    以下代码无法按预期工作 var fs require fs var PeerServer require peer PeerServer var server PeerServer port 9000 path peerjs ssl key
  • 如何在 Sonata 管理表单中使用 Ajax?

    我有一个具有以下字段和关联的商家实体 ORM ManyToMany targetEntity Category inversedBy merchants public categories ORM ManyToMany targetEnti
  • 无法让 CSS Sprite 工作..我做错了什么?

    我在用CSS 精灵生成器 http spritegen website performance org 为我正在开发的网页创建精灵 但它似乎不起作用 我不知道为什么 我想这是显而易见的事情 但是 所以 我选取了 3 张图像 压缩 生成了 P
  • WebStorm 中的语言注入(scss 到 html)

    问题 如何让WebStorm理解scss in html 描述 我已经存在基于的项目vue js https vuejs org 我有同事 vue with html语言 vue html 一般来说 vue文件的结构如下
  • 如何使不同电脑的速度(游戏帧率)相同?

    在我们学校 将游戏作为课堂项目来实现我们从计算机科学课程中学到的不同概念是很常见的 现在我们在我们的机器上开发了我们的游戏 一切似乎都工作正常 游戏速度正常等等 现在 当我们尝试在学校的计算机上测试我们的游戏时 或者当我们的教授在他自己的计