问题:好的,由于我对这个问题缺乏全面的了解,所以这听起来有些混乱。目前,我正在按照youtube教程创建游戏(了解java中游戏开发的基础知识)。
在学习了一些教程之后,我对主方法和包含它的类的真正目的感到困惑。我认为主要方法的工作是调用自己的类的所有方法和其他类中的所需方法。然而,在我的主要方法#34; Game"上课,这就是我的全部:
public static void main (String[] args) {
JFrame frame = new JFrame(title);
frame.add(game);
frame.setSize(WIDTH,HEIGHT);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setFocusable(true);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setVisible(true);
frame.pack();
game.start();
}
frame.add(game)
(game
是Game
的实例)"呼叫"其他类中的所有其他方法? frame.add()
究竟做了什么?此外,尽管阅读了大量解释,我仍然试图理解线程。 当我将game.start();
写入"开始"线程,这究竟是什么意思?它是否只调用游戏类中的所有方法?
如果需要,这是我的线程代码:
private synchronized void start() {
if(running) {
return;
} else {
running = true;
}
thread = new Thread(this);
thread.start();
}
public synchronized void stop(){
if(!running) {
return;
} else {
running = false;
}
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.exit((0));
}
以下是我初始化的变量:
private static final long serialVersionUID = -8921419424614180143L;
public static final int WIDTH = 640;
public static final int HEIGHT = WIDTH / 4*3;
public static String title = "Game";
public static Game game = new Game();
public static GameState state = GameState.MENU;
private boolean running = false;
private Thread thread;
private Renderer gfx;
public static Game getInstance(){
我只是不确定游戏类和其他类中的所有其他方法是如何调用的,如果这是我在main方法中的全部内容。 任何帮助非常感谢。你可能会说,我真的在这里挣扎。
答案 0 :(得分:1)
main()
方法的目的是为独立执行提供一个入口点。
在你的情况下(你没有说明game
是如何初始化的,但我猜这是一个static Game game = new Game();
初始化字段)会发生的事情是首先静态字段被初始化(将调用{{ 1}}构造函数)。
然后启动main方法。它会将初始化的Game()
设置为框架的内容(这意味着game
将从那时开始调用各种与UI相关的方法,例如Frame
。在Gui中进行线程处理是一个非常复杂的主题,但为了你的问题,你可以忽略它。)
main中的其余方法用于设置包含框架。这对于更大的应用来说是不寻常的,但对于这样的小例子来说却很常(它确实会导致游戏方法被调用,例如布局或绘图)。
最后主要调用paint()
(这是您展示的游戏上的game.start()
方法)。它确实创建了一个新线程,该线程执行(根据定义)start()
给run()
构造函数Runable
的{{1}}方法,此时这个方法是相同的实例为new Thread(this)
)。
答案 1 :(得分:0)
main()
方法就像它执行的任何其他方法一样。只会执行您明确执行(调用)的内容。
没有方法可以自动调用所有其他方法,因为这种方法没有用处。如果出于某种奇怪的原因,你想要这样一个方法,只需编写它并从中调用其他方法。
线程是程序中的单独执行路径。当你调用start()时,它开始,实际上它会转到它的特殊run()方法,它是并行执行的。
任何好的介绍性Java书籍都应该对你的问题有详细的解释。
答案 2 :(得分:0)
粗体问题的最短答案是:
frame.add(...)
将一个组件(如按钮或标签)添加到框架或面板。game.start()
创建一个新线程并在该线程中调用游戏类的run()
方法。game.run()
调用的。如果他们不在那里(他们不在main(...)
),他们就不会被召唤。我不得不同意PM77的评论。听起来你是在java开始,而线程和GUI都是非常复杂的主题。您可以设计基本游戏(即井字游戏),不需要其中任何一个。在你解决像这样具有挑战性的事情之前尝试一下。