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 限制帧率.  带来足够好的体验,并且降低电量消耗

 

转载于:https://www.cnblogs.com/lightlfyan/p/4236017.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值