Познакомьтесь с порядком слоев на временной шкале флэш-памяти через код as3 - PullRequest
0 голосов
/ 21 ноября 2011

Есть ли какой-нибудь метод, с помощью которого я могу узнать, какой из двух видеороликов, которые я использую, находится выше или ниже в расположении временной шкалы «слой» во флэш-памяти.

я спрашиваю, есть ли два мувиклипа 'a' и 'b'. Один на 10-м слое временной шкалы Flash Professional и «B» на 1-м уровне. Сможет изменить порядок индексов, используя чистый код as3, чтобы визуально сохранить мувиклип на 10-м слое поверх мувиклипа на 1-м слое ??

Спасибо. Вишну

Ответы [ 3 ]

1 голос
/ 21 ноября 2011

[[Изменить]]

Присоединенный метод не будет работать, если оба целевых объекта являются конечными узлами в общем родительском объекте.


Дети временной шкалы всегда находятся под каким-либо созданным actionScript дочерними объектами, связанными с классом временной шкалы.

, например

Если у вас есть временная шкала X, которая расширяет класс A, а в класс A вы добавляете дочерние элементы E, F, G, но временная шкала X содержит слои B, C, D, каждый из которых имеет один символ в каждом слое, а слой B в нижней части шкалы времени будет наблюдаться следующее:

child 5: G
child 4: F
child 3: E
child 2: D
child 1: C
child 0: B

Чтобы расширить ответ фелипема, я разработал следующий метод, чтобы определить, какой фрагмент ролика лежит выше другого. Это не было тщательно протестировано, но должно служить основой для вашей разработки.

function selectAbove(obj1:DisplayObject, obj2:DisplayObject):DisplayObject
{

    var obj1_parentCount:int = parentCount(obj1);
    var obj2_parentCount:int = parentCount(obj2);

    var target:DisplayObject;
    var other:DisplayObject;

    if (obj1_parentCount > obj2_parentCount)
    {
        target = obj1;
        other = obj2;
    }
    else
    {
        target = obj2;
        other = obj1;
    }

    var container:DisplayObjectContainer =
        (target is DisplayObjectContainer) ? target as DisplayObjectContainer : target.parent ;

    var container_last:DisplayObjectContainer;

    var sharedParent:DisplayObjectContainer;

    while(container)
    {
        if(container.contains(other))
        {
            sharedParent = container;
            break;
        }

        container_last = container;
        container = container.parent;
    }

    if(!sharedParent)
    {
        throw new Error("An object does not maintain its parent in the display heirarchy!");
    }

    var ret:DisplayObject;

    if(container == other)
    {
        ret = target;
    }

    return container != other ?
        container.getChildIndex(container_last) < container.getChildIndex(other) ?
            other :
            target
        :
        target
    ;
}

function parentCount(obj:DisplayObject):int
{
    var ret:int = 0;

    while(obj)
    {
        ret++;
        obj = obj.parent;
    }

    return ret;
}

Этот метод будет работать для вложенных иерархий отображения. Я не проверял это 100%, но первоначальные случаи завершены, как и ожидалось.

Удачи!

1 голос
/ 21 ноября 2011

Чтобы проверить, какой DisplayObject находится сверху, вам нужно сравнить их индексы с методом getChildIndex () :

var mc1 : MovieClip;
var mc2 : MovieClip;

// THIS CODE ASSUMES THAT mc1 and mc2 HAVE THE SAME PARENT
var parentMC : MovieClip = MovieClip(mc1.parent);

var topmost : MovieClip = parentMC.getChildIndex(mc1) < parentMC.getChildIndex(mc2) ? mc1 : mc2;

Тот, у кого самый низкий индекс,самый верхний.

РЕДАКТИРОВАТЬ:

Пока MovieClips имеют одного и того же родителя, вы можете управлять индексом объектов с помощью swapChildren () , swapChildrenAt () и setChildIndex () .Таким образом, чтобы вывести MovieClip на самый верхний фронт, вы должны сделать MovieClip(parent).setChildIndex(this, 0);

0 голосов
/ 21 ноября 2011

Я не думаю, что в контексте ActionScript есть слои, но вы можете определить, какие экземпляры DisplayObject будут дальше, используя:

DisplayObjectContainer . getChildIndex()

...