![]() |
setChildIndex() - как правильно
Всем привет.
Столкнулся с такой проблемой при переходе на AS3: Код:
movie.swapDepths(Math.round(this._xscale) + 100); // = 160Код:
this.setChildIndex(movie, Math.round(thumb.scaleX*100)+100);// = 160Все бы хорошо, но у меня глубина зависит от размера. Теперь не знаю к чему глубину привязать. Подскажите как быть |
в AS3 нету слоёв и глубин.
DisplayObjectContainer может иметь детей, каждый из которых будет иметь индекс. индексы от 0 и больше. детей с одинаковым индексом быть не может. прочитайте про концепцию Display List |
Ну индекс это и есть глубина) В AS3 пустых индексов посреди листа делать нельзя, поэтому аналог swapDepths - swapChildren принимает 2 DisplayObject-а как аргументы. Для того чтобы вынести какой-либо элемент выше других, можно получить максимальный индекс засчет использования свойства numChildren, а затем переставить клипы в нужном порядке.
А насчет привязки - нет смысла так делать, лучше брать значения размера, упорядочивать их в массиве по возрастанию/убыванию и расставлять детей в соответствии с индексами |
понятно, просто проблема теперь чисто логическая:
есть количество мувиков, в ходе программы их размер изменяеться посредством scaleY и scaleX, теперь чем больше размер, тем выше индекс. Уже весь извелся, не могу придумать как привязать scale и номер индекса. |
привяжите массив и сортируйте в нём ваших детей. номер индекса в массиве будет соответвовать его номеру в дисплэйлисте.
|
спасибо всем за советы - буду реализовывать :)
|
чтоб не создавать новый пост решил спросить здесь:
Код:
picholder.useHandCursor = true; // picholder - мувиклип |
buttonMode
|
BlooDHounD, пасиба :)
|
Если интересно, могу подсказать с реализацией достаточно быстро работающего zOrder, если наследовать класс от MovieClip, можно модифицировать под независимый класс:
Код:
private var zOrder:Array = new Array; |
Сайлас, спасибо большое, но я еще в AS3 новичок, не сумею к сожалению воспользоваться вашим трудом.(разве что обьяснить :))
Как мне советовали загнал в массивы данные по scaleY и имени мувика, посортировал его, но почему-то слои установить не выходит Код:
rec_array.sortOn(["xik", "name1"], Array.DESCENDING|Array.NUMERIC ); |
для контейнера, содержащего ТОЛЬКО объекты, подлежащие сортировке, можно просто удалить всех, а потом поставить в новом порядке:
Код:
private function sortChilds():void |
Удалять плохо - будет веселое перемигивание
allpicholder отнаследуйте от MovieClip или Sprite и добавьте мои методы, раз это контейнер всех необходимых объектов. Не надо будет привязываться ни к имени, ни к scaleX, сами будете задавать зОрдер, хоть рандомом, хоть как. |
>>будет веселое перемигивание
не будет: изображение выводится один раз, после выполнения кода ps пример где это реально работает (правда под 10й плеер) |
А если придется еще раз удалить и добавить или в зОрдере что-то поменять?
|
а если придется, то будем удалять и менять :)
сори, не понял вопроса |
Ну если динамически изменить зордер и вызвать функцию, где ремувится и добавляется, то дисплейобджект будет мигать
|
не понял опять, показать можешь?
впрочем не важно: если постараться, то можно и браузер уронить.. |
Ну смотри, если по циклу сделать removeChild, а потом делать addChild, то будет небольшое мигание... По крайней мере у меня так происходит
|
а если по циклу сделать x++, то ты увидишь как объект плавно перемещается ?
не хочу спорить, но нет у меня мигания, да и не должно его быть, имхо |
вот х++ не увидишь конечно. А при ремув+эдд оно есть... Быстро конечно все делается и т.п., но заметно.
И если делать у Sprite .graphics.clear(); .graphics.bitmapFill(bmd); .graphics.drawRect(..); .graphics.endFill(); Увидишь как все перемигивается |
у меня процедура обновления происходит около 30 раз в секунду (создаю карусель с картинок). Вот все готово, только не могу с этими слоями чертовыми разобраться.
Сайлас, можете на примере самом простом показать как к мувику allpicholder применить это все, потому чито с ООП знаком меньше месяца и в AS3 изучил пока не все? Буду очень благодарен |
Ну я же уже выложил. Вот собранный пример. Поддержку динамического изменения zOrder уж сами-то напишете? :)
Код:
public class TestZOrder extends MovieClip |
я прошу изинение за свой примитивизм, но я не имею представление как это подключить.
|
Подключить в Flash'e или в .as файле, во Flex'e том же? :)
|
подключит во Флеше as файл я сумею :), но как применять методы класса к моему
мувику - allpicholder? |
Если честно, то не знаю, т.к. не разбирался. Сам пишу во флексе, анимирует отдельный человек, если нужно сложная анимация, я умею только во фреймах AS писать, документ класс создать, заэкспортить для АС мувик и т.п. :)
Так что тут я не совсем помощник :) |
блин, ну что поделаешь.
Буду пробовать модель silina, хотя смотря на ваш класс, мне кажеться что идея схожая с идеей silina (возможно я и ошибаюсь) |
| Часовой пояс GMT +4, время: 21:13. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.