【问题标题】:Random position without overlapping无重叠的随机位置
【发布时间】:2010-03-23 04:48:28
【问题描述】:

如何阻止 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 的数量。如何让它一直检查直到一切正常?

【问题讨论】:

    标签: actionscript-3 random overlap


    【解决方案1】:

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

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

    【讨论】:

    • 我认为代码不会计算被调用对象的宽度。因此,正在加载的第三个对象将与其他 MC 重叠。
    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    相关资源
    最近更新 更多