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

我没有完全理解这个问题,但我不相信你可以重置 a 的迭代for..in。你需要去一个for(var i=0;...;i++).

于 2011-06-18T04:34:57.990 回答