import java.awt.Color; import java.awt.Graphics2D; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; /* * game template Aug 2014 * @author Forthx */ public class J2DTemplate extends JFrame implements Runnable, KeyListener { // resolution de la fenetre de jeu private final int W = 800; private final int H = 600; private static final long serialVersionUID = 1L; private final Color BLACK = new Color(0x0); private volatile List keys = new ArrayList(); private long timer; private Graphics2D g, buffer_g; private BufferedImage buffer; private void gameloop(Graphics2D image) { // exemple de boucle de jeu image.setColor(Color.white); image.drawString("touche(s) clavier : " + keys.toString(), 320, 305); image.setColor(Color.green); image.drawRect(W / 3, H / 3, W / 3, H / 3); } public J2DTemplate() { this.setSize(W, H); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(false); this.addKeyListener(this); this.setVisible(true); buffer = new BufferedImage(W, H, BufferedImage.TYPE_INT_ARGB); g = (Graphics2D) getGraphics(); buffer_g = (Graphics2D) buffer.getGraphics(); } public static void main(String[] args) { new Thread(new J2DTemplate()).start(); } public void run() { while (true) { buffer_g.setColor(BLACK); buffer_g.fillRect(0, 0, 800, 600); timer = System.nanoTime(); gameloop(buffer_g); g.drawImage(buffer, 0, 0, this); timer += 16000000; // 62 fps while (System.nanoTime() < timer) Thread.yield(); } } @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { if (!keys.contains(e.getKeyCode())) keys.add(e.getKeyCode()); } @Override public void keyReleased(KeyEvent e) { int index = keys.indexOf(e.getKeyCode()); if (index >= 0) keys.remove(index); } }