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 限制帧率.  带来足够好的体验,并且降低电量消耗
  • 相关阅读:
    为什么硬链接不能链接目录、文件inode 和目录 dentry 的区别联系
    LVM 详解
    pwd 命令详解
    type 命令详解
    查看文件中字符出现次数
    lesson
    xml linq
    新系统配置
    空合并运算符(??):
    dos.ORM配置和使用
  • 原文地址:https://www.cnblogs.com/lightlfyan/p/4236017.html
Copyright © 2011-2022 走看看