zoukankan      html  css  js  c++  java
  • 8_游戏循环

    ```
    while (true)
    {
      Event* event = waitForEvent();
      dispatchEvent(event);
    }
    
    while (true)
    {
      processInput();
      update();
      render();
    }
    
    ```
    
    
    游戏循环在游戏运行期间一直执行,每次循环,会处理用户输入,更新游戏状态,渲染场景等. 记录循环时间,来控制游戏的节奏(rate).
    
    ```
    \ 锁定帧率
    while (true)
    {
      double start = getCurrentTime();
      processInput();
      update();
      render();
    
      sleep(start + MS_PER_FRAME - getCurrentTime());
    }
    
    \ elapsed, 帧率不固定, 但是游戏使用时间差来进行更新
    \ 不同的帧率下,物理运动结果是一样的
    double lastTime = getCurrentTime();
    while (true)
    {
      double current = getCurrentTime();
      double elapsed = current - lastTime;
      processInput();
      update(elapsed);
      render();
      lastTime = current;
    }
    
    ```
    
    
    ```
    \ 定时执行(每隔多少毫秒执行一次),更有效率的模拟物理 ai 等等
    double previous = getCurrentTime();
    double lag = 0.0;
    while (true)
    {
      double current = getCurrentTime();
      double elapsed = current - previous;
      previous = current;
      lag += elapsed;
    
      processInput();
    
      while (lag >= MS_PER_UPDATE)
      {
        update();
        lag -= MS_PER_UPDATE;
      }
    
      render();
      // 防止物体跳动
      render(lag/MS_PER_UPDATE);
    }
    ```
    
    ### power consumption
    
    1 帧率尽量的高. 会带来更好的体验,也会跟耗电, 发热更多
    2 限制帧率.  带来足够好的体验,并且降低电量消耗
  • 相关阅读:
    java常用类
    java throw和catch同时使用
    HTML5 input 类型: email及url
    Android中集成支付宝
    HTML5 预加载
    SQLite数据库
    Android开发中如何加载API源码帮助开发
    Java中的static
    HTML5 Web Storage 特性
    gdal1.10编译经验
  • 原文地址:https://www.cnblogs.com/lightlfyan/p/4236017.html
Copyright © 2011-2022 走看看