我正在开发一种无尽的赛跑游戏,其中障碍物不断创造然后向左移动 - 因此,每一个障碍物在一秒左右的时间内对于玩家来说是不可见的,但它不是游戏中的任何特定数字速度越来越快。
有没有办法删除每个障碍物,例如,在它创建三秒后,为了节省一些记忆/速度游戏一点点?
我正在使用存储障碍物的数组的全局定义:
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 = []
足够吗?
答案 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)
如果你一次有一个固定的最大障碍物数量,你可以使用一个数组作为循环缓冲区。分配一个固定大小的数组,并维护一个变量,告诉你数组“开始”的索引,以及一个告诉你活跃的条目数。
这可能会给您带来额外的好处,因为您可以重新使用障碍物对象而不是分配和释放新物体,这样可以减少垃圾收集的开销。