Hi!
This is my first try at writing a game in Java. I’ve tried to set up a buffering strategy for my JFrame and then have an animation thread call repaint on the frame every 20 milliseconds. The contents of the window flickers heavily (much more than if I use an BufferedImage as back buffer for example).
/*
* Created on Apr 26, 2003
*/
package wizards;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
import wizards.gui.AnimationThread;
import wizards.gui.ImageLibrary;
import wizards.map.Map;
import wizards.map.Scenery;
/**
* @author Johan Tibell
*/
public class Wizards extends JFrame
{
public static int MAP_WIDTH = 15;
public static int MAP_HEIGHT = 15;
public static int TILE_SIZE = 32;
private Map map;
private BufferStrategy strategy;
public Wizards()
{
// Set the window's title.
super("Wizards");
// Set the application to exit on window closure.
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Some other code removed here!
// Set the window's size.
setSize(MAP_WIDTH * TILE_SIZE, MAP_HEIGHT * TILE_SIZE);
setVisible(true);
// Create a double buffer.
createBufferStrategy(2);
strategy = getBufferStrategy();
new AnimationThread(this).start();
}
public void paint(Graphics g)
{
super.paint(g);
Graphics offscreenGraphics = strategy.getDrawGraphics();
// Basically draws the same buffered image a couple of times.
map.draw(offscreenGraphics);
strategy.show();
}
/**
* Entry point of application. Creates a window and starts the application.
* @param args
*/
public static void main(String[] args)
{
new Wizards();
}
}
// ************************************************************************
/*
* Created on Apr 26, 2003
*/
package wizards.gui;
import java.awt.Component;
/**
* @author Johan Tibell
*/
public class AnimationThread extends Thread
{
private Component target;
public AnimationThread(Component target)
{
this.target = target;
}
public void run()
{
while(Thread.currentThread() == this)
{
target.repaint();
try {
Thread.sleep(20);
} catch (InterruptedException e) {}
}
}
}