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 SwipereFreshLayout下拉刷新

    Android SwipereFreshLayout下拉刷新

    这篇文章主要介绍了Android SwipereFreshLayout下拉刷新的相关资料,需要的朋友可以参考下
    2017-06-06
  • Android四种数据存储的应用方式

    Android四种数据存储的应用方式

    这篇文章主要介绍了Android四种数据存储的应用方式的相关资料,希望通过本文能帮助到大家,让大家理解掌握Android存储数据的方法,需要的朋友可以参考下
    2017-10-10
  • Android开发退出程序的方法汇总

    Android开发退出程序的方法汇总

    Android程序有很多Activity,比如说主窗口A,调用了子窗口B,子窗口B又调用子窗口C,back返回子窗口B后,在B中如何关闭整个Android应用程序呢? 下面脚本之家小编就给大家介绍android开发退出程序的几种方法,感兴趣的朋友参考下吧
    2016-03-03
  • flutter实现底部抽屉效果

    flutter实现底部抽屉效果

    这篇文章主要为大家详细介绍了flutter实现底部抽屉效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Android 登录处理简单实例(源码下载)

    Android 登录处理简单实例(源码下载)

    这篇文章主要介绍了Android 登录处理简单实例(源码下载)的相关资料,需要的朋友可以参考下
    2017-03-03
  • Android使用ScrollView实现滚动效果

    Android使用ScrollView实现滚动效果

    这篇文章主要为大家详细介绍了Android使用ScrollView实现滚动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • 浅析安卓(Android)的性能优化

    浅析安卓(Android)的性能优化

    性能优化是一个大的范畴,如果有人问你在Android中如何做性能优化的,也许都不知道从哪开始说起。那么这篇文章我们从布局优化和内存优化两个方面来展开说如何进行Android的性能优化。
    2016-08-08
  • Android VelocityTracker使用案例详解

    Android VelocityTracker使用案例详解

    这篇文章主要介绍了Android VelocityTracker使用案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Android7.0 工具类:DiffUtil详解

    Android7.0 工具类:DiffUtil详解

    这篇文章主要介绍了Android7.0 工具类:DiffUtil的相关资料,并附实例代码,和实现效果图,需要的朋友可以参考下
    2016-09-09
  • adnroid已安装应用中检测某应用是否安装的代码实例

    adnroid已安装应用中检测某应用是否安装的代码实例

    这篇文章主要介绍了Android怎么检测一个应用是否安装的方法,大家参考使用吧
    2013-11-11

最新评论