2

如何阻止 MC 相互重叠?

private function loadWishes():void {



for (i; i<myXMLList.length(); i++) {
    cBox=new MovieClip();
    checkOverlap(cBox);
    addChild(cBox);
    commentArray.push(cBox);

   }
  }
  private function checkOverlap(wishB:MovieClip) {
   wishB.x=Math.random()*stage.stageWidth;
   wishB.y=Math.random()*stage.stageHeight;
   for (var i:uint=0; i<commentArray.length; i++) {
    if (wishB.hitTestObject(commentArray[i])) {
     checkOverlap(wishB);
     return false;
    }
    trace(commentArray.length);
   }
  }

这似乎不起作用,因为它检查 MC 是否重叠的数量大约是舞台上 MC 的数量。如何让它继续检查直到一切正常?

4

1 回答 1

0

您在此处的代码通常应该可以防止重叠(尽管您应该小心 - 在最坏的情况下,如果剪辑太大或舞台太小,此代码可能会无限循环)。

但是,您的问题是您在新创建的MovieClip对象上调用此代码,这些对象是空的 - 因此它们永远不会重叠。大概您稍后会在剪辑中添加一些子内容,此时它们会重叠。所以解决方法是,您应该首先填充剪辑,然后检查它们是否重叠,或者,如果您知道剪辑的大小,那么hitTestObject您可以手动检查剪辑的位置是否与其他剪辑太近,而不是调用。

于 2010-03-23T05:58:05.697 回答