Я студент-компьютерщик, пытаюсь освоить основы разработки игр. Я работал с GUI фреймворками, такими как. NET Winforms и т. Д. c раньше, так что я не совсем новичок в GUI разработке, но сейчас я пытаюсь войти в Game Dev, и, как я Поймите, огромной центральной частью игрового устройства является Game L oop.
Как я понимаю, Game l oop работает примерно так: (псевдокод)
while (gameNotOver):
modelData = getModelData;
render(modelData);
И в идеале этот l oop будет выполняться и повторяться снова и снова так быстро, как мог бы каждый кадр (FPS).
Теперь я пытаюсь сделать это в Java Swing ДО Я продвигаюсь в Unity или что-то еще, поэтому у меня есть некоторые основы. Вот мой код:
Класс приложения:
public static void Start(){
GameLoop();
}
private static void GameLoop(){
System.out.println("GameLoop()");
System.out.println("---------------------------");
JFrame frame = new JFrame();
frame.setSize(300, 400);
GUI gui = new GUI();
frame.add(gui);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
int count = 0;
while (count < 10){
System.out.println("T-" + count + "-iteration");
int modelInfo = Engine.update();
gui.repaint();
count++;
System.out.println("---------------------------");
}
}
GUI класс:
public class GUI extends JPanel{
public GUI(){
}
@Override
public void paint(Graphics g){
System.out.println("GUI-paint()");
}
}
Основной метод находится в своем собственном классе, где он имеет одну строку: Application.Start();
Не то, чтобы код не работал, но меня это беспокоит:
Вывод результаты на консоли
Как видите, paint()
вызывается только в самом конце, в то время как все остальное в порядке в игре oop.
Сейчас Я действительно знаю, что paint()
вызывается один раз при создании JPanel
, но во-первых, не означает ли это, что оператор print в генерирует будет наверху?
Почему игра l oop ПЕРВАЯ завершает 10 итераций, прежде чем вызвать paint()
?
В идеале я пытаюсь каждый раз вызывать перерисовку В игре l oop каждый раз ( Часть рендера игры l oop)
Любая помощь очень ценится
Спасибо !!