所以我有一个变量attemptedFPS
。这是我的循环每秒运行多少次。
循环示例:
setInterval(console.log, 1000/attemptedFPS, "Hello World");
因此,例如,如果将attemptedFPS
设置为50,则该循环将每20毫秒运行一次(总计为50 /秒)。
我的问题是无论attemptedFPS
设置为什么都具有相同的输出。我想一个变量添加speed
到x
每秒。(即,如果speed
设置为10,则表示x
每秒加10 )。
因此,如果在该循环中,我有:
setInterval(function(){
x += speed;
}, 1000/attemptedFPS);
当然,现在根据会产生不同的结果attemptedFPS
。
不管是多少speed
,x
每秒增加的等式attemptedFPS
是什么?我应该添加x
什么?
- 添加
speed
到x
通过每一秒。- 无论函数执行多少次(也就是每秒执行一次)。
这可能是一个基本的数学问题。答案很简单:
将
speed
变量分为attemptedFPS
几部分。
因为它将被添加回您的循环中。
为了进行测试,此循环将运行1000/attemptedFPS
时间,无论您将其设置attemptedFPS
为什么,结果始终为x += speed
(示例为10)。
for (let i = 0; i < 1000; i += 1000/attemptedFPS) {
x += speed / attemptedFPS;
}
// result: 9.999999999999996;
但是正如您所看到的,它应该是10
正确的。这是因为JavaScript中的浮点精度问题。我建议Number.toPrecision())
处理此问题,但是应该可以。
for (let i = 0; i < 1000; i += 1000/attemptedFPS) {
x += speed / attemptedFPS;
x = +parseFloat(x.toPrecision(12));
}
// result: 10;
因此,请回答您的问题:
setInterval(function(){
x += speed / attemptedFPS;
x = +parseFloat(x.toPrecision(12));
}, 1000/attemptedFPS);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句