PDA

Просмотр полной версии : Почему не работает addChilAt()


dipter
20.02.2006, 18:40
Мне необходимо добавлять новый MovieClip (или DisplayObject) на определенный слой (как раньше depth). При использовании addChildAt(), происходит ошибка (все что нужно я импортирую). Как можно с этим справиться?

Antares
20.02.2006, 18:53
Для начала -- указать, что же за ошибка

Antares
20.02.2006, 20:03
Раз ответа нет, предположу: вы не понимаете, зачем нужен addChildAt. Он добавляет объект в позицию по глубине, но это уже не так глубина, что раньше. AS3 рулит глубинами сам.

Если вы хотите не указать визуальную глубину, а просто добавить элемент так, чтобы он не заместил другой -- используйте addChild и не парьтесь.

dipter
20.02.2006, 20:10
Мне нужно именно задавать глубину, а не распологать их по порядку. Например нужно для одного задать одну глубину, а для другого совершенно другую. А ошибка возникает следующая - №2006 the supplied index is out of bounds.

Antares
20.02.2006, 20:37
Повторяю: ActionScript 3 сам управляет глубинами. Если надо вынести объект визуально выше из списка соседей по контейнеру (читай: других детей этого же объекта-родителя), тогда используется addChildAt, но при этом параметр индекса не может быть больше, чем число элементов. Поэтому, добавлять первый объект через это свойство бессмысленно.

Этот метод создан для вставки объекта в середину по визуальной глубине, а также создания bring to front / send to back.

dipter
20.02.2006, 21:09
А если все таки необходимо чтобы между объектами была разница не в 1, а в заданное количество единиц по глубине... Нужно сделать так чтобы в одном объекте было несколько объектов с заданными глубинами (например 1000, 2000, 3000 и т.д.)

Antares
20.02.2006, 21:14
Вопрос сразу: а зачем?
Чтобы запихать под второй потом еще 999? Это говорит о неверной иерархии мувиклипов в приложении.

Adobe все верно сделали, автоматическое руление глубинами __рулит__.
Опишите задачу шире, что-нибудь подскажем.

BlooDHounD
20.02.2006, 21:18
хочу сам не знаю чего, мне не привычно. сделайте пожалуйста как было, а то мне 3 раза объяснили, а я так и не понял %)

dipter
20.02.2006, 21:57
Делаю игру, нужно чтобы юнит скрывался за объектом, у меня есть сектор в секторе максимум 50 объектов (все в BitmapData), и может быть до 100 юнитов. Чтобы скрыть юнита за объектом я хочу сделать следующее проверяю юнита на столкновение с объектом, а затем делаю следующее у каждого объекта есть маска, под которой я буду скрывать юнита (для этого делаю у маски blendMode="erase", а юнита ставлю под (по глубине) маску для этого у маски глубина должна быть равна не 1,2,3,....., а примерно 1000,2000,3000... чтобы под один объект запихать несколько юнитов......... Вобщем объяснить достаточно сложно, но я делал это под 7 flash, затем подгонял под 8-ой, а теперь и под flex нужно переделывать. Подбирал достаточно много способов скрытия за объетами наиболее оптимальный этот (который слишком долго объяснять). Я толко начал осваиваться в flex, и для того чтобы действительно переделывать все под flex мне нужно понять как можно сделать некоторые основные элементы.....

Antares
21.02.2006, 00:57
Не подо Флекс, а под АС3.

Во Флекс игру не сделаешь. А не проще воспользоваться возможностью цеплять любой объект к любому контейнеру? Т.е. взять юнита и перетащить в некий слой для скрытия... Раньше это было невозможно, а теперь к чему ужиматься?

dipter
21.02.2006, 10:10
Вчера так и подумал, немного по-другому правда, но смысл тот же. Только вот про контейнеры не знал, Спасибо за подсказку....

Еще кстати хотел поинтересоваться пытался ли кто-нибудь вставлять определенный символ из swf файла. Я пробовал так [Embed(source="", symbol="")] , но почему-то это не сработало. И можно ли сделать так чтобы в библиотеки был swf, а затем можно было брать любой символ из библиотеки в swf файле.

BlooDHounD
21.02.2006, 11:23
можно ... но только дл этого нужен 9й флэш :)
из 7го нужно юзать специальный клас %)

Antares
21.02.2006, 15:27
Закрыто. В правилах четко написано: одна тема на тред.