【发布时间】:2019-06-04 14:33:41
【问题描述】:
在一个while循环中,我正在调用一个对象的更新函数:
void ParticleEmitter::update(float deltaTime) {
time += deltaTime;
if (time >= delay) {
addParticle();
time = 0;
}
}
time 变量默认设置为 0。这基本上是经过的时间。
delay 是 0.01。这意味着每 0.01 秒后,它应该执行if 语句中的任何操作。
这似乎与帧速率无关。但事实并非如此。当我将 FPS 限制为 60 或打开 VSync 时,添加的粒子似乎更少。
增量时间计算正确,我已经测试过了。但我很困惑为什么这段代码不是独立于帧速率的。
【问题讨论】:
-
要考虑的事项:
deltaTime大于delay。如果限制帧速率,等待间隔结束所花费的空闲时间是否计入deltaTime? -
是的,事实上,我所做的任何运动,例如
position += velocity * deltaTime,无论帧速率如何,似乎都能给我相同的速度,但是在处理这种东西时,比如添加一次粒子每 0.01 秒,它就会给我带来麻烦。