连续删除数组项目(游戏障碍)

时间:2014-07-04 07:45:44

标签: javascript arrays performance

我正在开发一种无尽的赛跑游戏,其中障碍物不断创造然后向左移动 - 因此,每一个障碍物在一秒左右的时间内对于玩家来说是不可见的,但它不是游戏中的任何特定数字速度越来越快。

有没有办法删除每个障碍物,例如,在它创建三秒后,为了节省一些记忆/速度游戏一点点?

我正在使用存储障碍物的数组的全局定义:

var obstacles = []

然后我创造了一个障碍:

function display(obstacle) {
      obstacle.draw()  
      // the ".draw" function contains a simple "ctx.drawImage"
}

function display_loader(){
  for(i in obstacles){
    display(obstacles[i])
  }
}

之后,我移动障碍物并检查其位置是否与类似功能碰撞。

你能不能给我一个提示,我怎么能让数组最多包含3-5项? 此外,它会对游戏速度产生一些影响(考虑到它是用于移动平台),还是完全没必要?在游戏结束后清空数组是否足够? (在一个游戏周期中,最多可创建约100个项目)。如果是这样,我究竟应该如何清空这个数组呢? obstacles = []足够吗?

2 个答案:

答案 0 :(得分:1)

你可以用队列替换数组,并在每次添加新元素时继续移动它, 这种方式大小将保持不变(代码样本取自here):

var queue = [];
queue.push(2);         // queue is now [2]
queue.push(5);         // queue is now [2, 5]
var i = queue.shift(); // queue is now [5]

如果固定大小的队列不够 - 你是否跟踪对象何时变得不可见? 是否有一些与每个对象相关的坐标?您可以信赖这些信息 何时进行队列转移,并且仅在项目变为不可见时才进行转移 (但只有当项目以相同的顺序添加时它才会消失)。

答案 1 :(得分:0)

如果你一次有一个固定的最大障碍物数量,你可以使用一个数组作为循环缓冲区。分配一个固定大小的数组,并维护一个变量,告诉你数组“开始”的索引,以及一个告诉你活跃的条目数。

这可能会给您带来额外的好处,因为您可以重新使用障碍物对象而不是分配和释放新物体,这样可以减少垃圾收集的开销。