0

我目前正在画布上制作地图生成器。

这是代码工作代码:http: //jsfiddle.net/RtPmm/

以及提出问题的部分:

MapBuilder = function(){
...
this.checkPath = function(){
...
(logic condition ...)    {
  var i = Game.builders.indexOf(this);
  Game.builders.splice(i,1); /!\
}

并在渲染功能中:

for (var i = 0, len = Game.builders.length; i < len; i++) {
  Game.builders[i].checkPath();
}

我的问题是,当我的 MapBuilder 对象应该从数组中删除时,animateloop 函数在遍历Game.builders 数组时仍然会找到已删除的索引。

这个我真的查不出来。。

感谢您花时间留下答案(或评论)

4

1 回答 1

2

好吧,这是因为您一直在循​​环直到达到数组的初始长度,但是当您删除项目并且项目移动时长度会发生变化。

这个问题有几种解决方案,比如向后循环,或者类似:

var builders = Game.builders,
    builder;
for (var i = 0, len = builders.length; i < len; i++) {
   (builder = builders[i]).checkPath();
   if (builders[i] !== builder) {
       //builder was removed, fix the loop
       --i; --len;
   }
}
于 2013-09-07T16:11:34.573 回答