Android基本游戏循环实例分析

 更新时间:2015年10月10日 12:09:49   作者:红薯  
这篇文章主要介绍了Android基本游戏循环,以完整实例形式较为详细的分析了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程序设计有所帮助。

相关文章

  • Android通过自定义ImageView控件实现图片的缩放和拖动的实现代码

    Android通过自定义ImageView控件实现图片的缩放和拖动的实现代码

    通过自定义ImageView控件,在xml布局里面调用自定的组件实现图片的缩放。下面给大家分享实现代码,感兴趣的朋友一起看看吧
    2016-10-10
  • Android PicSelector图片选择器小功能

    Android PicSelector图片选择器小功能

    这篇文章主要为大家详细介绍了Android PicSelector图片选择器小功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 解析android中系统日期时间的获取

    解析android中系统日期时间的获取

    本篇文章是对在android中,如何系统日期时间获取的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 详解android是如何管理内存的

    详解android是如何管理内存的

    这篇文章主要介绍了详解android是如何管理内存的,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下
    2021-03-03
  • Android三级缓存原理讲解

    Android三级缓存原理讲解

    今天小编就为大家分享一篇关于Android三级缓存原理讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Android上使用jspf插件框架的方法

    Android上使用jspf插件框架的方法

    这篇文章主要介绍了Android上使用jspf插件框架的方法,实例分析了jspf插件框架的功能与使用技巧,需要的朋友可以参考下
    2015-06-06
  • 详解android与服务端交互的两种方式

    详解android与服务端交互的两种方式

    这篇文章主要介绍了详解android与服务端交互的两种方式,此处介绍两种方式:使用Google原生的Gson解析json数据,使用JSONObject解析json数据,有兴趣的可以了解一下
    2017-07-07
  • Android Gradle开发指南详解

    Android Gradle开发指南详解

    这篇文章主要为大家详细介绍了Android Gradle开发指南的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • 详解Android 硬布局item的高级写法

    详解Android 硬布局item的高级写法

    这篇文章主要介绍了详解Android 硬布局item的高级写法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 一篇文章弄懂kotlin的扩展方法

    一篇文章弄懂kotlin的扩展方法

    这篇文章主要给大家介绍了如何通过一篇文章弄懂kotlin的扩展方法,文中通过示例代码介绍的非常详细,对大家学习或者使用kotlin具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09

最新评论