2010-03-23 2 views
2

Как остановить MCs от перекрытия друг друга?Случайное положение без перекрытия

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

+0

Я вижу проблему сейчас .. редактирование моего ответа. – fenomas

Смежные вопросы