Java Snake Game 避免使用 Thread.sleep [英] Java Snake Game avoiding using Thread.sleep

查看:56
本文介绍了Java Snake Game 避免使用 Thread.sleep的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用 Java 制作了我的第一款游戏 - Snake,它的主循环看起来像这样

I made my first game in Java - Snake, it's main loop looks like this

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() 更改为其他内容,但我不知道如何以简单的方式执行此操作.提前感谢您的建议.

But in my project's requirments there is a responsivity point, so I need to change the Thread.sleep() into something else, but I have no idea how to do this in an easy way. Thanks in advance for any advice.

推荐答案

我用 Java 完成了一两个简单的游戏,并使用 Swing Timer 来处理主游戏循环.计时器将允许您设置 ActionListener 在提供的 delay 过去后被触发.中间延迟将来自您的帧速率.最基本的用法如下:

I've done a simple game or two with Java and to handle the main game loop I've used a Swing Timer. The timer will allow you to set an ActionListener to be fired after a provided delay has elapsed. The in-between delay would be derived from your frame rate. The most basic usage would look like:

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

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

This would set the initial and in-between delays to the same value. You could also set them to be different values if needed like so:

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

在上面的例子中,listener 会在开始后尽快触发,之后会在中间有一个 delay.

In the above example, the listener will fire ASAP after starting and with a delay in-between thereafter.

这篇关于Java Snake Game 避免使用 Thread.sleep的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆