我有一个扩展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”或者它是什么?
答案 0 :(得分:0)
如果您正在使用java.awt.Canvas
,则应使用java.awt.image.BufferStrategy
进行绘画,而不是覆盖paint
。
Canvas
不是双缓冲的,但是使用Canvas
的目的是获得BufferStrategy
的访问权限,BufferedImage
提供双缓冲功能,主动绘画控制和更接近访问硬件。
不应在每个绘制周期重新绘制整个贴图,而应将贴图贴图渲染为{{1}}并改为绘制图像