From 41eedcea47691db66de7c0475a67f2196267b4f6 Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 13 Mar 2014 14:59:58 +0200 Subject: [PATCH] Change canvas to double buffered drawing --- src/com/annimon/turrets/GameCanvas.java | 37 +++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/src/com/annimon/turrets/GameCanvas.java b/src/com/annimon/turrets/GameCanvas.java index 0284f46..1084a51 100644 --- a/src/com/annimon/turrets/GameCanvas.java +++ b/src/com/annimon/turrets/GameCanvas.java @@ -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(); + } + } + } }