我如何将游戏循环放入我的代码中?

Posted

技术标签:

【中文标题】我如何将游戏循环放入我的代码中?【英文标题】:How would I fit a game loop into my code? 【发布时间】:2020-11-26 11:25:04 【问题描述】:

我正在用 Java 创建一个 2D 滚动游戏。我确实有使用 javascripthtml、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 线程中进行循环。然后更容易通过事件来做到这一点。但是有一个在摇摆中制作动画的例子***.com/questions/21247776/… 感谢您的评论!如果我不使用 swing,那我如何在 JPanel 上绘制图像和形状? JPanel 是 swing 的一部分。我建议使用游戏库。如果你还用什么swing那么你需要创建单独的线程来更新游戏对象(它可以只是一个数组)然后调用repaint然后休眠一段时间。 【参考方案1】:

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

【讨论】:

感谢您的回复!我将如何递归调用paint方法?它需要一个图形参数。 您可以拨打repaint() 哦,太好了!非常感谢!

以上是关于我如何将游戏循环放入我的代码中?的主要内容,如果未能解决你的问题,请参考以下文章

SQLITE3 - 使用循环将数据放入列中

C++ For 循环和数组混淆

将多个 PHP 变量放入 Javascript 数组

如何将此游戏循环转换为 Linux(C)[关闭]

如何与opengl并行运行程序[关闭]

如何让 lua 在 while true 循环中停止 if 循环?