我目前正在使用画布上的地图生成器。
以下是代码工作代码: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函数在迭代通过游戏编译器数组时仍然会找到已删除的索引。
我真的找不到这个......
感谢您抽出时间留下答案(或评论)
答案 0 :(得分: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;
}
}