我正在尝试使用Java开发2D游戏.到目前为止,我已设法将游戏设置为使用全屏独占模式并在自定义线程中进行主动渲染.我决定使用的游戏循环是固定时间步变量渲染类型.这种类型的游戏循环应该尽可能快地渲染,因为设备可以处理,我并不完全满意.所以我试图限制帧速率Thread.sleep()
.
如果我关闭所有渲染,只需在游戏循环中更新游戏,就可以Thread.sleep(1)
成功地进行游戏1 ms
.不过,如果我打开渲染,有时候Thread.sleep(1)
睡觉的方式长于1 ms
一样15 ms
.我通过添加/删除线来打开/关闭渲染:
BufferedImage drawImage = render(Math.min(1d, lag / TIME_PER_UPDATE));
drawToScreen(drawImage);
Run Code Online (Sandbox Code Playgroud)
导致线程长时间睡眠的原因是什么?
这是我第一次在这些论坛上发帖,所以请告诉我,如果我在帖子中做错了什么,或者这是否重复(我没有找到类似的帖子).
import java.awt.Color;
import java.awt.DisplayMode;
import java.awt.Frame;
import java.awt.Graphics2D;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.RenderingHints;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
public class Main implements KeyListener
{
private static final long serialVersionUID = 1L;
private boolean gameRunning = false;
private final double UPDATE_RATE = 60;
private final double TIME_PER_UPDATE = 1000000000 / …
Run Code Online (Sandbox Code Playgroud)