java - 带有可编辑框架帽的 Java 游戏循环
问题描述
我正在尝试在 java 中创建一个游戏循环,它有一个可以在游戏运行时设置的帧上限。我遇到的问题是我有一个 render() 函数和一个 update() 函数。只为 render() 和 update() 设置帧上限意味着当您更改帧上限时游戏逻辑的速度将会改变。知道如何在不影响游戏逻辑速度(更新())的情况下在游戏中设置帧上限吗?
解决方案
如评论中所述:您可以创建两个线程,其中一个负责更新,另一个负责渲染。
尝试考虑适合您的需求和游戏的架构。您可以尝试以下方法:
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Runner extends JPanel {
private static final long serialVersionUID = -5029528072437981456L;
private JFrame window;
private Renderer renderer;
public Runner() {
setPreferredSize(new Dimension(WindowData.WIDTH, WindowData.HEIGHT));
setFocusable(true);
requestFocus();
window = new JFrame(WindowData.TITLE);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.add(this);
window.setResizable(false);
window.pack();
window.setLocationRelativeTo(null);
window.setVisible(true);
renderer = new Renderer(getGraphics());
renderer.start();
}
public static void main(String[] args) {
new Runner();
}
}
import java.awt.Graphics;
public class Renderer implements Runnable {
private Graphics context;
private Thread thread;
private boolean running;
public Renderer(Graphics context) {
this.context = context;
thread = new Thread(this, "Renderer");
running = false;
}
public void start() {
if (running)
return;
running = true;
thread.start();
}
public void render() {
context.clearRect(0, 0, WindowData.WIDTH, WindowData.HEIGHT);
context.fillRect(50, 50, 100, 100);
}
public void run() {
while (running) {
render();
// ** DO YOUR TIME CONTROL HERE ** \\
}
}
}
这段代码实际上会导致严重的性能问题,因为您无法控制渲染 ( repaint()
) 时间。
但这只是一个演示,向您展示如何使用不同的线程。做你自己的架构。
推荐阅读
- powershell - 使用 PowerShell 编辑 index.html 后出现此消息的原因是什么?
- javascript - 通过相同的属性合并两个数组,带有异常值,Javascript
- php - PDO 获取输出 bool(false)
- ios - Codenameone 编译错误尝试编译 IOS(调试)并出现摄像头错误
- java - 如何在 Firebase recyclerview 上设置适配器?
- angular - Angular 4从单独的组件重新加载标题组件
- azure - Azure 表存储和触发函数
- excel - 为什么 keyDown(shift) 函数不适用于 Excel 自动化的 python pyautogui
- excel - 在列中找到一个字符串并返回并返回一个带有行号的数组
- c - 连接二进制数