AS3 Custom Контроль глубины - PullRequest
0 голосов
/ 11 мая 2011

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

Я думал о создании класса MovieClipDepth , который расширяет MovieClip с добавленной глубиной свойства, и контейнером класса , который расширяет DisplayObjectContainer которые все объекты будут размещены внутри .

Класс Container будет переопределять метод addChild до , обновляя порядок отображения дочернего элемента при добавлении дочернего элемента.

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

Ответы [ 2 ]

2 голосов
/ 11 мая 2011

Как вы можете прочитать в комментарии ниже вашего вопроса, есть несколько способов для этого.

Но на самом деле то, что вы просили " установить глубину мувиклипа на любое число ", на самом деле не может быть сделано в AS3. Если я прав, вы можете сделать это в AS2, так что ...

... как это было ...

_root.createEmptyMovieClip("mc", -1000);

или

_root.createEmptyMovieClip("mc1", 1);
_root.createEmptyMovieClip("mc2", 10);

работает, но не работает в AS3. В AS3 глубина начинается с 0, и вы не можете заставить DisplayObject сидеть на уровне, который не является непрерывным от нуля.

Таким образом, глубина 3 мувиклипов в контейнере возможна только при следующих значениях: 0, 1, 2.

Например, глубина не может быть отрицательным числом.

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

Так сказать, вы можете создавать виртуальные глубины.

Так что, я думаю, вы можете переопределить метод addChildAt, например. В настоящий момент, если вы введете неправильное число: отрицательное или большее, чем число детей, flash вернет ошибку:

RangeError: Error #2006: The supplied index is out of bounds.

Итак, mc.addChildAt(newchild, -1000) дает арест.

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

Подобно сопряжению глубин с добавленными дочерними элементами, сортировке массива по глубине, а затем управлению дочерними элементами в соответствии с порядком.

Если у вас есть еще вопросы, не стесняйтесь спрашивать, надеюсь, это приблизит вас к решению.

0 голосов
/ 11 мая 2011

Предлагаю вам взглянуть на этот урок:

Обзор методов управления глубинами на сайте http://www.flashandmath.com/. Полагаю, вы не новичок.

Ссылка такая: http://www.flashandmath.com/intermediate/depths/index.html

...