【发布时间】:2020-11-26 11:25:04
【问题描述】:
我正在用 Java 创建一个 2D 滚动游戏。我确实有使用 javascript、html、css 和 node.js 在网络上制作游戏的经验,所以我知道几乎所有游戏都有一个更新所有内容的主循环。问题是,我想不出一种在我的代码中实现游戏循环的方法。这是我的代码:
import javax.swing.*;
public class Main {
public static boolean isRunning = true;
public static void main(String[] args) throws InterruptedException {
JFrame frame = new JFrame("Oxygen - Version 1.0");
JPanel panel = new Panel();
frame.setSize(1000, 500);
frame.setResizable(false);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
import java.awt.*;
import javax.swing.*;
public class Panel extends JPanel {
public void paint(Graphics graphics) {
this.setBackground(Color.BLACK);
graphics.setColor(Color.BLUE);
graphics.fillRect(0, 0, 100, 100);
}
}
这段代码运行良好,但游戏循环在这段代码中的位置以及运行频率如何?
【问题讨论】:
-
如果你没有动态发生、没有渲染、没有物理、没有定时游戏逻辑等,那么就不需要/放置游戏循环。
-
好的,举个例子,如果我想将屏幕上的方块从左向右移动,那么游戏循环在哪里?
-
我认为在这种情况下,swing 并不是最好的选择。您不能在 ui 线程中进行循环。然后更容易通过事件来做到这一点。但是有一个在摇摆中制作动画的例子stackoverflow.com/questions/21247776/…
-
感谢您的评论!如果我不使用 swing,那我如何在 JPanel 上绘制图像和形状?
-
JPanel 是 swing 的一部分。我建议使用游戏库。如果你还用什么swing那么你需要创建单独的线程来更新游戏对象(它可以只是一个数组)然后调用repaint然后休眠一段时间。