import java.awt.Canvas; import java.awt.Graphics2D; import java.awt.Dimension; import java.awt.BorderLayout; import java.awt.event.KeyListener; import java.awt.event.KeyEvent; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.event.MouseWheelListener; import java.awt.event.MouseWheelEvent; import java.awt.image.BufferStrategy; import javax.swing.JFrame; import javax.swing.JPanel; public class Scene extends JPanel implements Runnable, KeyListener, MouseListener, MouseMotionListener, MouseWheelListener { protected int WIDTH; protected int HEIGHT; protected BufferStrategy buffer; protected long desiredFPS = 60; protected long desiredDeltaLoop = (1000*1000*1000)/desiredFPS; protected JFrame frame; protected boolean running; protected Canvas canvas; protected int guiSize = 2; protected Scene(JFrame frame, Sub sub) { this.frame = frame; //getting window size this.WIDTH = (int) this.frame.getSize().getWidth(); this.HEIGHT = (int) this.frame.getSize().getHeight(); this.canvas = new Canvas(); this.canvas.setBounds(0, 0, this.WIDTH, this.HEIGHT); this.canvas.setIgnoreRepaint(true); this.canvas.addKeyListener(this); this.canvas.addMouseListener(this); this.canvas.addMouseMotionListener(this); this.canvas.addMouseWheelListener(this); } public void start() { this.canvas.createBufferStrategy(2); this.buffer = this.canvas.getBufferStrategy(); this.canvas.requestFocus(); this.running = true; new Thread(this).start(); } public void run() { long beginLoopTime; long endLoopTime; long currentUpdateTime = System.nanoTime(); long lastUpdateTime; long deltaLoop; while (running) { beginLoopTime = System.nanoTime(); //getting window size this.WIDTH = (int) this.frame.getSize().getWidth(); this.HEIGHT = (int) this.frame.getSize().getHeight(); this.render(); lastUpdateTime = currentUpdateTime; currentUpdateTime = System.nanoTime(); this.update((int) ((currentUpdateTime - lastUpdateTime)/(1000*1000))); endLoopTime = System.nanoTime(); deltaLoop = endLoopTime - beginLoopTime; if (deltaLoop > this.desiredDeltaLoop) { //late } else { try { Thread.sleep((this.desiredDeltaLoop - deltaLoop)/(1000*1000)); } catch (InterruptedException e ) { } } } } protected void render() {} protected void update(int deltaTime) {} @Override public void keyTyped(KeyEvent e) {} public void keyPressed(KeyEvent e) {} public void keyReleased(KeyEvent e) {} public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseDragged(MouseEvent e) {} public void mouseMoved(MouseEvent e) {} public void mouseWheelMoved(MouseWheelEvent e) {} }