2010-03-23 86 views
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在舞臺上量。如何讓它繼續檢查,直到一切正常?

回答

0

您在這裏的代碼應該一般工作,以防止重疊(儘管您應該小心 - 在最壞的情況下,如果剪輯太大或舞臺太小,此代碼可能無限循環)。

但是,您的問題是您在新創建的MovieClip對象上調用此代碼,這些對象是空的 - 因此它們不能重疊。大概你在稍後將某些兒童內容添加到剪輯中,並且在那時它們重疊。所以解決的辦法是,您應該首先填充剪輯,然後檢查它們是否重疊,或者,如果知道剪輯的大小,則不必調用hitTestObject,您可以手動檢查剪輯的位置是否與其他剪輯太靠近。

+0

我認爲代碼不會計算被調用對象的寬度。所以正在加載的第三個對象將與其他MC重疊。 – Hwang 2010-03-23 07:04:22

+0

我現在看到了問題..編輯我的答案。 – fenomas 2010-03-23 08:19:38