import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main implements Runnable
{
private final int WIDTH = 1000;
private final int HEIGHT = 500;
private long desiredFPS = 60;
private String title = "Maple Story";
private long desiredDeltaLoop = (1000*1000*1000)/desiredFPS;
private boolean running = true;
private JFrame frame;
private Canvas canvas;
private BufferStrategy bufferStrategy;
public Main()
{
// create new Frame
frame = new JFrame(title);
// create new JPanel with specified width and height
JPanel panel = (JPanel) frame.getContentPane();
panel.setPreferredSize(new Dimension(WIDTH, HEIGHT));
panel.setLayout(null);
// create a canvas inside the JPanel with specified width and height
canvas = new Canvas();
canvas.setBounds(0, 0, WIDTH, HEIGHT);
canvas.setIgnoreRepaint(true);
panel.add(canvas);
// Add Mouse and Key Listeners
canvas.addMouseListener(new MouseControl());
canvas.addKeyListener(new KeyInputHandler());
// initialize the window
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
setup();
// set graphics device
canvas.createBufferStrategy(2);
bufferStrategy = canvas.getBufferStrategy();
// focus on the window
canvas.requestFocus();
}
/*
* Main game loop
*/
public void run()
{
long beginLoopTime;
long endLoopTime;
long currentUpdateTime = System.nanoTime();
long lastUpdateTime;
long deltaLoop;
while(running)
{
beginLoopTime = System.nanoTime();
render();
lastUpdateTime = currentUpdateTime;
currentUpdateTime = System.nanoTime();
update((int) ((currentUpdateTime - lastUpdateTime)/(1000*1000)));
endLoopTime = System.nanoTime();
deltaLoop = endLoopTime - beginLoopTime;
if(deltaLoop > desiredDeltaLoop)
{
//Do nothing. We are already late.
}
else
{
try
{
Thread.sleep((desiredDeltaLoop - deltaLoop)/(1000*1000));
}
catch(InterruptedException e)
{
//Do nothing
}
}
}
}
/*
* Method to initialise graphics that are going to be painted to the screen
*/
private void render()
{
Graphics2D g = (Graphics2D) bufferStrategy.getDrawGraphics();
g.clearRect(0, 0, WIDTH, HEIGHT);
render(g);
g.dispose();
bufferStrategy.show();
}
/*
* Initialise all of your Objects in here
*/
public void setup()
{
}
/*
* Method that handles all the movements that are supposed to happen
* So initialise all the x and y changes here
* deltaTime tells you how many nanoseconds have passed by since this function
* was last called
*/
protected void update(int deltaTime)
{
}
/*
* Method where you paint to the screen
*/
protected void render(Graphics2D g)
{
/*
* START PAINTING
* START PAINTING
* START PAINTING
* START PAINTING
* START PAINTING
* START PAINTING
*/
/*
* STOP PAINTING
* STOP PAINTING
* STOP PAINTING
* STOP PAINTING
* STOP PAINTING
* STOP PAINTING
*/
}
/*
* Keyboard Action listeners
* Key esc closes the program by default
*/
private class KeyInputHandler extends KeyAdapter
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==27)
{
System.exit(0);
}
}
public void keyReleased(KeyEvent e)
{
}
}
/*
* Mouse Action Listeners
*/
private class MouseControl extends MouseAdapter
{
}
/*
* public static void main
* I do not even have to explain this
*/
public static void main(String [] args)
{
Main ex = new Main();
new Thread(ex).start();
}
}