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 限制帧率.  带来足够好的体验,并且降低电量消耗
  • 相关阅读:
    pymysql
    flask WTForms
    线程安全问题
    flask学习2
    @functools.wraps(func)
    Solidity开发神器Remix
    Web3j实现智能合约
    基于Ubuntu Docker环境下进行以太坊实践
    以太坊RLP机制分析
    以太坊网络服务分析
  • 原文地址:https://www.cnblogs.com/lightlfyan/p/4236017.html
Copyright © 2011-2022 走看看