1

これは、ランダムな円を描くために使用しているコードの一部です。

if(circles.length != 0) { //1+ circles have already been drawn
  x = genX(radius);
  y = genY(radius);
  var i = 0;
  iCantThinkOfAGoodLabelName:
  for(i in circles) {
    var thisCircle = circles[i];
    if(Math.abs(x-thisCircle["x"])+Math.abs(y-thisCircle["y"])>radius*2) {
      //overlaps
    } else {
      //overlaps
      x = genX(radius);
      y = genY(radius);
      continue iCantThinkOfAGoodLabelName;
    }

    if(i == circles.length - 1) { //Last iteration
      //Draw circle, add to array
    }
  }
}

問題は、オーバーラップがある場合、新しく生成された座標を持つ円が、オーバーラップしている円がすでにチェックされている円とのオーバーラップについてチェックされないことです。continueステートメントを使用する前にiを0に設定しようとしましたが、機能しませんでした。助けてください、私は本当に混乱しています。

4

3 に答える 3

4

for ... inアレイでは使用しないでください。

for(var i = 0; i < circles.length; ++i)代わりに使用してください。次に、を設定してリセットできますi = 0

于 2011-06-18T04:34:14.137 に答える
1

標準のforループを使用してみませんか

for (var i=0,l = circles.length;i < l; i++) {
   ....  

   if (i === l) {
     // draw
   }
}
于 2011-06-18T04:35:16.203 に答える
0

質問を完全には理解していませんが、の反復をリセットできるとは思いませんfor..in。に移動する必要がありますfor(var i=0;...;i++)

于 2011-06-18T04:34:57.990 に答える