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

Deleting array items continuously (game obstacles)

本文关键字:游戏 删除 数组 项目 连续      更新时间:2023-09-26

我正在开发一款无尽的奔跑游戏,在这款游戏中,障碍是连续出现的,然后移到左边——所以,每个障碍在一秒钟左右的时间内对玩家来说都是不可见的,但随着游戏速度的增加,它不是任何特定的数字。

是否有一种方法可以删除每个障碍,例如,在它创建后三秒钟,以节省一些内存/加快游戏速度?

我使用了一个数组的全局定义,其中障碍物被存储:

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 = []够吗?

你可以用queue代替array,并且每次添加新元素时都要移动它,这样大小将是恒定的(代码示例取自这里):

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]

如果固定大小的队列是不够的-你跟踪当对象变得不可见?每个对象都有相应的坐标吗?你可以信赖这个信息什么时候进行队列移动,只有当项目变得不可见时才进行移动

如果你在屏幕上有一个固定的障碍物的最大数量,你可以使用一个数组作为循环缓冲区。分配一个固定大小的数组,并维护一个变量,告诉您数组从哪个索引"开始",一个变量告诉您有多少项是活动的。

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