首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连续删除数组项(游戏障碍)

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

Stack Overflow用户
提问于 2014-07-04 15:45:44
回答 2查看 110关注 0票数 1

我正在开发一款无休止的跑步者游戏,其中的障碍物不断地被创建,然后向左移动-所以,每个障碍物对玩家来说在一秒左右的时间内是看不见的,但随着游戏速度的增加,它不是任何具体的数字。

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

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

代码语言:javascript
复制
var obstacles = []

然后我创建了一个障碍:

代码语言:javascript
复制
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 = []就足够了吗?

EN

回答 2

Stack Overflow用户

发布于 2014-07-04 15:51:44

你可以用队列替换数组,并且每次你添加新的元素时都不断地移动它,这样大小将是恒定的(代码样本取自here):

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-08-29 05:06:11

如果一次屏幕上的障碍物的最大数量是固定的,那么可以使用一个数组作为循环缓冲区。分配一个固定大小的数组,并维护一个变量,该变量告诉您数组从哪个索引“开始”,另一个变量告诉您有多少条目处于活动状态。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24569175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档