我正在开发一款无休止的跑步者游戏,其中的障碍物不断地被创建,然后向左移动-所以,每个障碍物对玩家来说在一秒左右的时间内是看不见的,但随着游戏速度的增加,它不是任何具体的数字。
有没有一种方法可以删除每个障碍,例如,在它创建后三秒钟,以节省一些内存/提高游戏速度?
我使用存储障碍物的数组的全局定义:
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 = []就足够了吗?
发布于 2014-07-04 15:51:44
你可以用队列替换数组,并且每次你添加新的元素时都不断地移动它,这样大小将是恒定的(代码样本取自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]如果固定大小的队列还不够,您是否会跟踪对象何时变得不可见?是否存在与每个对象相关联的坐标?您可以在进行队列移位时依赖此信息,并且仅当项变为不可见时才进行移位(但这仅在项以相同的顺序添加时才有效)。
发布于 2015-08-29 05:06:11
如果一次屏幕上的障碍物的最大数量是固定的,那么可以使用一个数组作为循环缓冲区。分配一个固定大小的数组,并维护一个变量,该变量告诉您数组从哪个索引“开始”,另一个变量告诉您有多少条目处于活动状态。
这可能会给您带来额外的好处,因为您可能能够重用障碍对象,而不是分配和释放新的障碍对象,从而减少垃圾收集开销。
https://stackoverflow.com/questions/24569175
复制相似问题