Случайная позиция без наложения - PullRequest
2 голосов
/ 23 марта 2010

Как не допустить, чтобы МС перекрывали друг друга?

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 на сцене.как заставить его продолжать проверять, пока все в порядке?

1 Ответ

0 голосов
/ 23 марта 2010

Код, который вы здесь используете, должен в целом работать для предотвращения наложения (хотя вы должны быть осторожны - в худшем случае этот код может зацикливаться бесконечно, если клипы слишком велики или сцена слишком мала).

Однако ваша проблема в том, что вы вызываете этот код для вновь созданных MovieClip объектов, которые пусты, поэтому они никогда не могут перекрываться.Предположительно, вы добавляете какое-то дочернее содержимое в клипы позже, и в этот момент они перекрываются.Таким образом, исправление состоит в том, что вы должны сначала заполнить клипы, прежде чем проверять, перекрываются ли они, или, альтернативно, если вы знаете размер клипов, тогда вместо вызова hitTestObject вы можете вручную проверить, не слишком ли близка позиция клипа к другим.клипы.

...