Скрепление фрагмента ролика в ActionScript - PullRequest
1 голос
/ 31 марта 2010

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

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

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

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

Ответы [ 3 ]

1 голос
/ 31 марта 2010

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

container.setChildIndex(redBall, 0);

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

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

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

Debu

1 голос
/ 31 марта 2010

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

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

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

0 голосов
/ 31 марта 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
}
...