Наложение мувиклипов в ActionScript

Я создаю игру, в которой интерфейс является одним из первых элементов, загружаемых на экран. Кнопка звука, пауза и все биты -

Во время игры - все усадьбы динамически добавляются и убираются на сцену. Поэтому мой интерфейс находится за моей игровой сценой.

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

Могу ли я переопределить addChild моего класса документа, и каждый раз, когда добавляется новый дочерний элемент, я переустанавливаю интерфейс вверх?


person Glycerine    schedule 31.03.2010    source источник


Ответы (3)


Вы можете использовать setChildIndex для изменения порядка объектов, которые уже содержатся в мувиклипе или спрайте. Например, если у вас есть объект с именем container, который содержит объекты redBall, blueBall и многие другие шары, вы можете использовать следующее, чтобы убедиться, что redBall находится позади всего остального:

container.setChildIndex(redBall, 0);

Точно так же вы можете убедиться, что blueBall будет отображаться перед всем остальным, используя:

container.setChildIndex(blueBall, container.numChildren-1);

addChildAt поможет вам добавить дочерние элементы прямо в их правильное положение, а setChildIndex позволит вам переместить уже размещенные объекты. Надеюсь, это поможет.

дебу

person debu    schedule 31.03.2010
comment
Ничего страшного, рад, что помогло :) - person debu; 31.03.2010

Загляните в addChildAt, он позволяет указать индекс, в который следует добавить новый объект.

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/DisplayObjectContainer.html#addChildAt%28%29

Хорошая стратегия — хранить все элементы интерфейса в одном родительском Sprite/MovieClip, а все игровые ресурсы — в другом. (С интерфейсом один сверху)

person Tyler Egeto    schedule 31.03.2010
comment
Хороший, я смотрел и видел, как он работает, но я не был уверен, как он был собран. - person Glycerine; 31.03.2010
comment
+1 за комментарий о сохранении всех элементов интерфейса в одном родительском Sprite/MovieClip. Это правильный подход к этому. - person aaaidan; 01.04.2010

По предложению ваших ребят я сделал это, по-видимому, если вы добавите дочерний объект, уже находящийся на экране, он просто переиндексируется вверх. Это выглядит нормально?

private var topLevelChildrenArray:Array = [];

public function addTopLevelChild(child:DisplayObject):DisplayObject
{
    topLevelChildrenArray.push(child)
    return this.addChildAt( child, this.numChildren - 1 );  
}

override public function addChild(child:DisplayObject):DisplayObject
{
    this.addChildAt(child, this.numChildren);

    for each(var topChild:DisplayObject in topLevelChildrenArray)
    {
        super.addChild(topChild);
    }

    return child
}
person Glycerine    schedule 31.03.2010