У меня есть класс, который расширяет Canvas
, это мой конструктор:
public Game() {
JFrame frame = new JFrame("Game");
JPanel panel = (JPanel) frame.getContentPane();
panel.setPreferredSize(new Dimension(1000, 600));
panel.setLayout(new FlowLayout());
setBounds(0, 0, 1000, 600);
setIgnoreRepaint(true);
frame.add(this);
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setFocusable(true);
addKeyListener(this);
try {
img = ImageIO.read(getClass().getClassLoader().getResource("img.png"));
} catch (IOException e) {
System.out.println(e);
}
}
Это петля
try {
this.repaint();
Thread.sleep(17);
} catch (InterruptedException e) {
e.printStackTrace();
}
и метод окраски
super.paint(g);
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[0].length; j++) {
Tile current = map[i][j];
g.drawImage(img, i * 32, j * 32, this);
}
}
Это нормально, но, обновляя каждые 17 миллисекунд, это просто как отставание. Я вижу, как он очищается и рисует каждый раз. Как исправить это "fps drop" или что-то еще?
Если вы используете java.awt.Canvas
, вы должны рисовать, используя java.awt.image.BufferStrategy
вместо переопределения paint
.
Canvas
не используется с двойной буферизацией, но точка использования Canvas
- это доступ к BufferStrategy
, который обеспечивает возможности двойной буферизации, активное управление рисованием и более тесный доступ к оборудованию.
Вместо того, чтобы перерисовывать всю карту на каждом цикле краски, вы должны отобразить карту плитки в BufferedImage
и нарисовать изображение вместо