Change canvas to double buffered drawing
This commit is contained in:
parent
2e8a85bf90
commit
41eedcea47
@ -1,7 +1,6 @@
|
|||||||
package com.annimon.turrets;
|
package com.annimon.turrets;
|
||||||
|
|
||||||
import java.awt.Canvas;
|
import java.awt.Canvas;
|
||||||
import java.awt.Color;
|
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
@ -11,24 +10,56 @@ import java.awt.image.BufferedImage;
|
|||||||
*/
|
*/
|
||||||
public class GameCanvas extends Canvas {
|
public class GameCanvas extends Canvas {
|
||||||
|
|
||||||
|
private final Graphics G;
|
||||||
|
private final BufferedImage buffer;
|
||||||
|
private final Terrain terrain;
|
||||||
private BufferedImage background;
|
private BufferedImage background;
|
||||||
|
|
||||||
public GameCanvas() {
|
public GameCanvas() {
|
||||||
setSize(Constants.WIDTH, Constants.HEIGHT);
|
setSize(Constants.WIDTH, Constants.HEIGHT);
|
||||||
setPreferredSize(Constants.SCREEN_DIMENSION);
|
setPreferredSize(Constants.SCREEN_DIMENSION);
|
||||||
|
|
||||||
|
buffer = new BufferedImage(Constants.WIDTH, Constants.HEIGHT, BufferedImage.TYPE_INT_RGB);
|
||||||
|
G = buffer.createGraphics();
|
||||||
|
|
||||||
initBackground();
|
initBackground();
|
||||||
|
terrain = new Terrain(Constants.WIDTH);
|
||||||
|
terrain.generate(System.currentTimeMillis());
|
||||||
|
|
||||||
|
new DrawingThread().start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void paint(Graphics g) {
|
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() {
|
private void initBackground() {
|
||||||
background = new BufferedImage(Constants.WIDTH, Constants.HEIGHT, BufferedImage.TYPE_INT_RGB);
|
background = new BufferedImage(Constants.WIDTH, Constants.HEIGHT, BufferedImage.TYPE_INT_RGB);
|
||||||
Graphics g = background.createGraphics();
|
Graphics g = background.createGraphics();
|
||||||
new Background().draw(g);
|
new Background().draw(g);
|
||||||
g.dispose();
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user