软件编程
位置:首页>> 软件编程>> Android编程>> Android基本游戏循环实例分析

Android基本游戏循环实例分析

作者:红薯  发布时间:2021-12-26 12:06:22 

标签:Android,游戏,循环

本文实例讲述了Android基本游戏循环。分享给大家供大家参考。具体如下:


// desired fps
private final static int  MAX_FPS = 50;
// maximum number of frames to be skipped
private final static int  MAX_FRAME_SKIPS = 5;
// the frame period
private final static int  FRAME_PERIOD = 1000 / MAX_FPS;
@Override
public void run() {
 Canvas canvas;
 Log.d(TAG, "Starting game loop");
 long beginTime;   // the time when the cycle begun
 long timeDiff;   // the time it took for the cycle to execute
 int sleepTime;   // ms to sleep (<0 if we're behind)
 int framesSkipped; // number of frames being skipped
 sleepTime = 0;
 while (running) {
   canvas = null;
   // try locking the canvas for exclusive pixel editing
   // in the surface
   try {
     canvas = this.surfaceHolder.lockCanvas();
     synchronized (surfaceHolder) {
       beginTime = System.currentTimeMillis();
       framesSkipped = 0; // resetting the frames skipped
       // update game state
       this.gamePanel.update();
       // render state to the screen
       // draws the canvas on the panel
       this.gamePanel.render(canvas);
       // calculate how long did the cycle take
       timeDiff = System.currentTimeMillis() - beginTime;
       // calculate sleep time
       sleepTime = (int)(FRAME_PERIOD - timeDiff);
       if (sleepTime > 0) {
         // if sleepTime > 0 we're OK
         try {
           // send the thread to sleep for a short period
           // very useful for battery saving
           Thread.sleep(sleepTime);
         } catch (InterruptedException e) {}
       }
       while (sleepTime < 0 && framesSkipped < MAX_FRAME_SKIPS) {
         // we need to catch up
         // update without rendering
         this.gamePanel.update();
         // add frame period to check if in next frame
         sleepTime += FRAME_PERIOD;
         framesSkipped++;
       }
     }
   } finally {
     // in case of an exception the surface is not left in
     // an inconsistent state
     if (canvas != null) {
       surfaceHolder.unlockCanvasAndPost(canvas);
     }
   }  // end finally
 }
}

希望本文所述对大家的Android程序设计有所帮助。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com