独立于用户fps随机生成内容的最佳方法

时间:2014-11-19 18:17:53

标签: javascript random

我想在我的游戏中随机生成每个平均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秒的间隔随机产生东西吗?

另外,有没有更好地做到这一点?

1 个答案:

答案 0 :(得分:1)

使用setTimeoutsetInterval应该是确保在一定时间后重复调用函数的好方法。

如果您不想使用它,那么让您的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