Java 贪吃蛇游戏避免使用 Thread.sleep

2024-02-24

我用 Java 制作了我的第一个游戏 - 贪吃蛇, 它的主循环看起来像这样

while (true)
    {
        long start = System.nanoTime();
        model.eUpdate();
        if (model.hasElapsedCycle())
        {
            model.updateGame();
        }
        view.refresh();
        long delta = (System.nanoTime() - start) / 1000000L;
        if (delta < model.getFrameTime())
        {
            try
            {
                Thread.sleep(model.getFrameTime() - delta);
            } catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }

但在我的项目的要求中有一个响应点,所以我需要改变Thread.sleep()到别的事情上,但我不知道如何以简单的方式做到这一点。 预先感谢您的任何建议。


我用 Java 做了一两个简单的游戏,为了处理主游戏循环,我使用了 SwingTimer。计时器将允许您设置ActionListener https://docs.oracle.com/javase/8/docs/api/java/awt/event/ActionListener.html提供后被解雇delay已经过去了。中间延迟将由您的帧速率得出。最基本的用法如下:

Timer timer = new Timer(delay, listener);
timer.start();

这会将初始延迟和中间延迟设置为相同的值。如果需要,您还可以将它们设置为不同的值,如下所示:

Timer timer = new Timer(delay, listener);
timer.setInitialDelay(0);
timer.start();

在上面的例子中,listener启动后将尽快触发delay此后之间。

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

Java 贪吃蛇游戏避免使用 Thread.sleep 的相关文章

随机推荐

  • JWT(JSON Web 令牌)前端 webpack 错误

    import React useEffect useState from react import jwt from jsonwebtoken import useNavigate from react router dom import
  • msbuild:构建为 appxbundle(AppxBundle=始终不工作)

    我有一个共享的 Windows8 1 项目 其中包含电话和桌面项目 我定义了不同的配置来构建用于桌面的 x86 x64 和用于手机的 ARM msbuild 工作正常 没有错误 但输出文件夹 或其他任何地方 上没有最终的 appxbundl
  • 获取所有 POST 数据并通过电子邮件发送

    我正在尝试使用 PHP 邮件功能向自己发送一封包含所有帖子变量的电子邮件 到目前为止我有这个 message foreach POST as key gt value echo Field htmlspecialchars key is h
  • 当其他成员设置为新值时,C 联合成员给出特定/错误的值。为什么下面的 C 代码会输出这样的结果?

    include
  • IE 创建字体图标奇怪的下划线

    我正在使用 fontello 字体图标 除了 Internet Explorer 之外 它们都可以完美运行 它们也不会对悬停状态做出反应 所以 我现在遇到的问题是字体图标下有一条奇怪的下划线 我已经尝试过文本装饰 边框底部 有没有人对此有任
  • JDK8与Windows XP兼容吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我发现可以在 Windows XP 上安装 JDK8 为了避免安装错误 我们必须更改jdk 8u11 windows i586 exe使用
  • 仅获取存储桶的顶级对象

    我的问题与此类似如何使用node js获取谷歌云存储文件夹中的文件列表 https stackoverflow com questions 49684942 how to get a list of files in a google cl
  • C++ 中使用 #include 和 #include 的区别

    使用有什么区别 include
  • PopOver 自动调整位置

    我遇到了 PopOver 的问题 我希望它能够在所有位置自动调整 如果右侧找不到空间 则会从左侧打开 但我希望它对顶部 底部做同样的事情 即 如果顶部找不到空间 则应在底部打开 反之亦然 难道我就没有什么办法可以为各方做到这一点吗 data
  • 错误:尝试解析模块 @apollo/client React Native 时

    安装新版本的 apollo 客户端后出现此错误 我尝试了其他版本并降级但没有任何结果 我还尝试在 Metro config js 中指定解析 cjs 类型的文件 apollo client main cjs 但什么也没有 Error err
  • 具有 PCLMULQDQ 的快速 CRC *未反映*

    我正在尝试写一个PCLMULQDQ 优化的 CRC 32 https www intel com content dam www public us en documents white papers fast crc computatio
  • 在 UserDetailsS​​ervice 中使用 @Cacheable 时编码密码为空

    在授权期间遇到缓存问题 我无法弄清楚 因此 在授权期间 每次不向数据库发出请求时 我都想缓存该方法 在第一次请求时缓存为空 一切都很好 直到缓存在一段时间后被删除 但是当缓存存在时 我得到 401 因为 o s s c bcrypt BCr
  • 增加 ServicePointManager.DefaultConnectionLimit 的缺点

    我正在多线程环境中调用网络服务 我的很多调用由于操作超时或错误请求而失败 但如果我以线性方式执行 则没有一个调用会失败 这意味着使用多个线程调用 Web 服务存在问题 经过大量分析 我发现并发连接的限制导致了这些异常 因此我通过添加以下代码
  • 双重否定-(-n)的原因是什么?

    我正在查看一些遗留代码 我看到了类似的东西 char n 65 char str 1024 sprintf str d n 为什么作者 不再在场 写了 n 而不仅仅是n 不会 n够了吗 首先要注意的是 n实际上减少 n加 1 并计算出新值
  • 尝试导入张量流时出现非法硬件指令

    我刚刚使用以下说明安装了tensorflowvirtualenv方法 安装过程很顺利 所以我认为没有任何问题 安装后 我继续尝试导入它以验证一切正常 我收到以下消息 1 4492 illegal hardware instruction c
  • html 中指定的图像宽度单位是什么?

    我对 html 语言完全陌生 在html中附加的图像中 我们需要通过以下标记指定图像的宽度 img width 350 src var tmp jpg 那么这里的宽度单位是什么 我猜它是以像素为单位的 如果以像素为单位 是否意味着图像的大小
  • 从 xcode 命令行生成 ipa

    从命令行生成 IPA 文件的最佳方法是什么 我使用的是 xcode 4 2 并使用以下命令生成存档 xcodebuild scheme AppStore clean archive 协同设计后 这会在构建输出目录中生成 dSYM 和 app
  • XAML 中的字符串格式

    我正在尝试格式化我的string每 3 个位置有一个逗号 如果不是整数则有一个小数 我检查了大约 20 个例子 这是我得到的最接近的例子
  • 如何在 iTunes 上获取我的应用程序统计信息?

    我最近发布了一款 iPhone 应用程序 但我没有看到任何方法可以像在 Google Play 中一样检查应用程序统计信息 您能告诉我该怎么做吗 你可以从iTunes连接 https itunesconnect apple com 登录您的
  • Java 贪吃蛇游戏避免使用 Thread.sleep

    我用 Java 制作了我的第一个游戏 贪吃蛇 它的主循环看起来像这样 while true long start System nanoTime model eUpdate if model hasElapsedCycle model up