zoukankan      html  css  js  c++  java
  • The Game Loop

    1 #define MAXIMUM_FRAME_RATE 120
    2 #define MINIMUM_FRAME_RATE 30
    3 #define UPDATE_INTERVAL (1.0 / MAXIMUM_FRAME_RATE)
    4 #define MAX_CYCLES_PER_FRAME (MAXIMUM_FRAME_RATE / MINIMUM_FRAME_RATE)
    5 - (void)gameLoop {
    6   static double lastFrameTime = 0.0f;
    7   static double cyclesLeftOver = 0.0f;
    8   double currentTime;
    9   double updateIterations;

    10   // Apple advises to use CACurrentMediaTime() as CFAbsoluteTimeGetCurrent() is
    11   // synced with the mobile network time and so could change causing hiccups.
    12   currentTime = CACurrentMediaTime();
    13   updateIterations = ((currentTime - lastFrameTime) + cyclesLeftOver);

    14   if(updateIterations > (MAX_CYCLES_PER_FRAME * UPDATE_INTERVAL))
    15     updateIterations = (MAX_CYCLES_PER_FRAME * UPDATE_INTERVAL);

    16   while (updateIterations >= UPDATE_INTERVAL) {
    17     updateIterations -= UPDATE_INTERVAL;

    18     // Update the game logic passing in the fixed update interval as the delta
    19     [sharedGameController updateCurrentSceneWithDelta:UPDATE_INTERVAL];
    20   }

    21   cyclesLeftOver = updateIterations;
    22   lastFrameTime = currentTime;

    23   // Render the scene
    24   [self drawView:nil];
    25 }

    游戏性能可以分为三个层次,

    第一,当每次GameLoop间隔小于等于UPDATE_INTERVAL时,保证所有的帧都被绘制,达到了最佳游戏性能。

    第二,当每次GameLoop间隔置于UPDATE_INTERVAL和MAX_RECYCLE*UPDATE_INTERVAL之间时,数据每更新几次(最多MAX_RECYCLE次),才绘制一帧,导致帧减少,游戏画面下降,俗称“卡”。此种情况下,不影响游戏时间轴,即不影响速度。

    第三,当每次GameLoop间隔大于MAX_RECYLE*UPDATE_INTERVAL时(机器性能实在太差),此种情况下,游戏数据计算缓慢,不能及时更新,会导致游戏时间轴变慢,画面比卡更卡。这就在有些老机器上运行《魔兽争霸》时常常会看到的,烂机器上运行的慢,人物一秒钟才走一步的情况。

  • 相关阅读:
    测试页面content No cp
    视频流开发 视频传输编解码协议规范 视频监控AI实现视频监控自动目标识别回放定位 AI 无人机 机器人 高空天眼等 图景处理
    web安全 waf相关
    Jemeter数据库压力测试场景模拟应用备忘
    C++工具库收集记录
    gulp自动部署
    CSS实现图片与文本的居中对齐的常见方式
    flexible.js 移动端自适应方案及flex布局原理
    从源头细说Webpack与Gulp
    webstorm 2020.2永久破解激活码 安装教程(Windows Mac Linux)
  • 原文地址:https://www.cnblogs.com/tekkaman/p/2172590.html
Copyright © 2011-2022 走看看