我想在我的游戏中随机生成每个平均2秒的内容,与用户fps无关,这是正确的,如果不是,问题是什么:
function update(delta) {
var interval = 2; // in seconds
if (Math.floor(Math.random() * (1 / delta) * interval) == 0) spawn();
...
obj.x += obj.vx * delta
}
这会以平均2秒的间隔随机产生东西吗?
另外,有没有更好地做到这一点?
答案 0 :(得分:1)
使用setTimeout
或setInterval
应该是确保在一定时间后重复调用函数的好方法。
如果您不想使用它,那么让您的spawner对象的update
函数使用当前世界时间而不仅仅是当前帧的delta
。此外,让对象记录它最后一次产生的东西。这样,您只需要这样做:
// maybe it should be 2000, in milliseconds, idk
if (currentTime - this.lastTimeSomethingSpawned >= 2) {
spawn();
this.lastTimeSomethingSpawned = currentTime;
}
如果要随机化间隔而不是持续2秒,只需每次重新计算一个新的随机间隔:
// maybe it should be 2000, in milliseconds, idk
if (currentTime - this.lastTimeSomethingSpawned >= this.spawningInterval) {
spawn();
this.lastTimeSomethingSpawned = currentTime;
this.spawningInterval = 2 + (2*Math.random()-1)*this.intervalDeviation;
}
其中this.intervalDeviation
类似于0.5
。这样,每当产生某些东西时,this.spawningInterval
将介于1.5和2.5之间。
最后,这个问题更适合Gamedev Stackexchange