Позиционирование Z-Index с CreateJS

Я пытаюсь установить z-индекс для моей строки Graphic(). Я пытаюсь настроить линию так, чтобы она всегда находилась позади двух других фигур. Две фигуры и одна линия.

Насколько я знаю, первый добавленный элемент имеет значение z=0, второй — z=1 и так далее. Это так? Является ли z=0 верхней позицией или нижней?

Я пытаюсь изменить их положение по оси z, используя stage.setChildIndex(элемент, уровень z), верно?

Спасибо.


person Cod1ngFree    schedule 28.08.2013    source источник
comment
Можете ли вы опубликовать код? Я не совсем уверен, каковы ожидания.   -  person Lanny    schedule 28.08.2013


Ответы (2)


1) Чем ниже индекс, тем дальше находится элемент, поэтому: 0 = bottom Также имейте в виду, что setChildIndex потерпит неудачу, если вы попытаетесь сделать что-то вроде: container.setChildIndex(child,500) если у вас только 4 дочерних элемента , поэтому индекс, который вы хотите установить для дочернего элемента, не должен выходить за пределы допустимого диапазона. Это означает, что если вы хотите отсортировать их, вы должны начать с самого низкого индекса (обычно 0).

2) Или вы также можете дать своим объектам свойство, такое как, например: child.zIndex = 500;, и написать свой собственный метод сортировки, чтобы затем использовать sortChildren-метод контейнера, например:

function sortByZ(a,b) {
    if (a.zIndex < b.zIndex) return -1;
    if (a.zIndex > b.zIndex) return 1;
    return 0;
}

myContainer.sortChildren(sortByZ);

// or a shorter version:
function sortByZ(a,b) {
    return a.zIndex - b.zIndex;
}

Таким образом, вам не придется беспокоиться об установке zIndex, который находится за пределами допустимого диапазона.

person olsn    schedule 28.08.2013
comment
И я мог бы получить количество детей, если бы я сделал getNumChildren(), верно? Спасибо olsn, ошибся не только в заказе, но и в индексе. Я делал setChildIndex(child, 200), потому что думал, что он будет храниться в неограниченном массиве. Спасибо! - person Cod1ngFree; 28.08.2013
comment
Кстати, идет ли индекс от 0 до getNumChildren()? - person Cod1ngFree; 28.08.2013
comment
Да, это правильно. Все эти методы getNumChildren() setChildIndex() в основном являются просто функциями-оболочками для базовых операций с массивами, например, getNumChildren() просто возвращает this.children.length, а setChildIndex() просто проверяет индекс и выполняет операцию склеивания children- array. Итак, если вы хотите что-то узнать, загляните под капот: createjs.com/Docs/EaselJS/files/ — очень хороший код, написанный командой gskinner :) - person olsn; 29.08.2013

С createjs допустимые значения для setChildIndex() находятся в диапазоне от 0 до numChildren()-1. Такой вызов, как:

container.setChildIndex(container.numChildren());

не удастся.

Более того, когда вы увеличиваете дочерний индекс — например, для дочернего элемента с z-индексом 1 при изменении на 2 дочерний элемент будет помещен перед объектом с индексом 2. Если вы уменьшите индекс, перемещая дочерний элемент назад, он будет перемещаться за объектом в целевом положении. Это может добавить путаницы, если вы не уверены, каков начальный z-индекс дочернего элемента.

person dadasign    schedule 13.06.2015