首页 > 系统 > Android > 正文

Android基本游戏循环实例分析

2020-04-11 11:24:03
字体:
来源:转载
供稿:网友

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

// desired fpsprivate final static int  MAX_FPS = 50;// maximum number of frames to be skippedprivate final static int  MAX_FRAME_SKIPS = 5;// the frame periodprivate final static int  FRAME_PERIOD = 1000 / MAX_FPS; @Overridepublic 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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表