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 に答える