Hey guys, i've been making a little super mario clone in Java but I need help,
you see, if you download it and play it, you will notice it is quite stutter-y, and that really shouldn't be the case since it's such a small program.
game link : Click Here (scroll down a little to download)
So i assume it's 2 things, either my game loop is faulty (i'll provide the code below) or it's simply that Java just sucks at this, so I'm gonna go with the first one cause i love Java.
Anyways, here's my game loop.
/**
* Contains the main flow of the game.
*/
private void run() {
timer.schedule(new TimerTask() {
private final BufferStrategy bf = frame.getBufferStrategy();
private long startTime = System.currentTimeMillis();
private long currTime = startTime;
@Override
public void run() {
elapsedTime = System.currentTimeMillis() - currTime;
currTime += elapsedTime;
try {
//get graphics
g = bf.getDrawGraphics();
//get input
inputGame();
//update the game
updateGame(elapsedTime);
//draw the game
drawGame(g, elapsedTime);
} finally {
g.dispose();
}
// Shows the contents of the backbuffer on the screen.
bf.show();
Toolkit.getDefaultToolkit().sync();
}
//start this loop every 17 milliseconds, which is roughly 58 frames per second
}, 10, 17);
}
the variable timer, is of class Timer in Java.util.Timer, not the swing Timer, which i heard is unreliable, but this one is too clearly.
at the moment, I'm not really doing much with elapsedTime, but it's there just in case, i figured i didn't need it since that loop will
run every 17 milliseconds, and my update and rendering methods only take 2-5 milliseconds to finish.
I have another issue though, sometimes when i run the game with no background tasks going on (web browser, itunes etc), the loop only runs every 32 milliseconds instead of the intended 17, however, if i open other tasks it runs as intended, any ideas as to why this happens?
Do you guys know of very effective game loops that provide very smooth rendering?
I can provide more code if necessary, Thanks in advance!