我目前正在画布上使用地图生成器。

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

和引发问题的部分:

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


并在render函数中:

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


我的问题是,当我应该从数组中删除MapBuilder对象时,animateloop函数在通过Game.builders数组进行迭代时仍会找到已删除的索引。

我真的找不到。

感谢您抽出宝贵时间留下答案(或评论)

最佳答案

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

有几种解决此问题的方法,例如反向循环或类似的方法:

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;
   }
}

关于javascript - 动画中的Javascript数组拼接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18675103/

10-11 06:59