1
0

Change canvas to double buffered drawing

This commit is contained in:
Victor 2014-03-13 14:59:58 +02:00
parent 2e8a85bf90
commit 41eedcea47

View File

@ -1,7 +1,6 @@
package com.annimon.turrets;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
@ -11,24 +10,56 @@ import java.awt.image.BufferedImage;
*/
public class GameCanvas extends Canvas {
private final Graphics G;
private final BufferedImage buffer;
private final Terrain terrain;
private BufferedImage background;
public GameCanvas() {
setSize(Constants.WIDTH, Constants.HEIGHT);
setPreferredSize(Constants.SCREEN_DIMENSION);
buffer = new BufferedImage(Constants.WIDTH, Constants.HEIGHT, BufferedImage.TYPE_INT_RGB);
G = buffer.createGraphics();
initBackground();
terrain = new Terrain(Constants.WIDTH);
terrain.generate(System.currentTimeMillis());
new DrawingThread().start();
}
@Override
public void paint(Graphics g) {
g.drawImage(background, 0, 0, null);
G.drawImage(background, 0, 0, null);
terrain.draw(G);
g.drawImage(buffer, 0, 0, null);
}
@Override
public void update(Graphics g) {
paint(g);
}
private void initBackground() {
background = new BufferedImage(Constants.WIDTH, Constants.HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics g = background.createGraphics();
new Background().draw(g);
g.dispose();
}
private class DrawingThread extends Thread {
private boolean keepRunning = true;
@Override
public void run() {
while (keepRunning) {
try {
Thread.sleep(100);
} catch (InterruptedException ex) {}
repaint();
}
}
}
}