1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
public class GameLoop extends Thread {
private final static int FRAMES_PER_SECOND = 30 ;
private final static int SKIP_TICKS = 1000 / FRAMES_PER_SECOND;
private final GameContent view;
private boolean running = false;
private double timer = 0 ;
public GameLoop(GameContent view)
{
this.view = view;
}
public void setRunning(boolean run)
{
running = run;
}
@Override
public void run(){
long startTime;
long sleepTime;
while (running)
{
startTime = System.currentTimeMillis();
Canvas c = null;
try
{
c = view.getHolder().lockCanvas();
double time = System.currentTimeMillis() - timer ;
synchronized (view.getHolder()){view.draw( c , time );}
timer = System.currentTimeMillis();
}
finally
{
if(c != null){view.getHolder().unlockCanvasAndPost(c);}
}
sleepTime = SKIP_TICKS-(System.currentTimeMillis()-startTime);
try
{
if (sleepTime >= 0)
{
sleep(sleepTime);
}
}
catch (Exception e){}
}
}
} |
Partager