/*******************************************************************************/ Game g = null; GameRunner gr = null; Input input; void setup() { size(240,240); input = new Input(); g = new Game(); gr = new GameRunner(); } void calc() { input.update(); g.update(); } void draw() { g.draw(); } public void dispose() { gr.dispose(); } class GameRunner implements Runnable { public static final int FRAME_RATE = 50; // FPS public static final int FRAME_DELAY = 1000 / FRAME_RATE; Thread runThread = null; public GameRunner() { noLoop(); runThread = new Thread(this); runThread.start(); } public void dispose() { runThread = null; } long lastTime = 0; public void run() { while (Thread.currentThread() == runThread) { long currentTime = System.currentTimeMillis(); if (lastTime == 0) { lastTime = currentTime; calc(); redraw(); } long dt = currentTime - lastTime; int maxCalc = FRAME_RATE; boolean newFrame = false; while (dt>=FRAME_DELAY && maxCalc>0) { calc(); newFrame = true; dt -= FRAME_DELAY; maxCalc--; } if (newFrame) { redraw(); lastTime = currentTime; } else if (dt