【问题标题】:How would I fit a game loop into my code?我如何将游戏循环放入我的代码中?
【发布时间】: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然后休眠一段时间。

标签: java loops


【解决方案1】:

在你的主对象中实现一个while循环,它将无限地迭代直到你指定退出。然后您的游戏对象将在循环内更新

【讨论】:

  • 感谢您的回复!我将如何递归调用paint方法?它需要一个图形参数。
  • 您可以拨打repaint()
  • 哦,太好了!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 2013-12-15
  • 1970-01-01
  • 2020-09-18
相关资源
最近更新 更多