Я работаю над игрой. При попытке визуализировать использование игрового цикла в «основном» потоке метод PaintComponent вызывается редко. Я читал о многих других подобных проблемах, но, похоже, ни одна из них мне не помогла. Возможно, я до сих пор не все правильно понимаю.
Я знаю, что это все еще проблема с EDT, поскольку когда я перемещаю мышь или нажимаю клавишу, игра отображается плавно.
Спасибо!
Вот мой сокращенный код:
public class Game implements Runnable {
private GamePanel gamePanel;
private Thread gameThread;
private final int FPS_SET = 120;
public Game() {
gamePanel = new GamePanel();
gamePanel.requestFocus();
gameThread = new Thread(this);
gameThread.start();
}
@Override
public void run() {
double timePerFrame = 1000000000.0 / FPS_SET ;
long lastFrame = System.nanoTime();
long now = lastFrame;
while(true) {
now = System.nanoTime();
if (now - lastFrame >= timePerFrame) {
// Updates Scenery
_reDraw();
lastFrame = now;
}
}
}
private void _reDraw() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
gamePanel.repaint();
}
});
}
}
public class GamePanel extends JPanel {
// ...
public void paintComponent(Graphics g) {
// draw
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... mmediately
Java Swing InvokeLater не перерисовывается сразу ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение