![]() |
Дублирование movieclip при использовании setChildIndex.
Сделала небольшую открыточку.
Состоит из 5 объектов - movieclip (mc1, mc2, ... mc5), которые расположены в основной сцене. Во всех mc в первом кадре стоит stop(). Вызываю в первом кадре основной сцены Код AS3:
Например Код AS3:
Код AS3:
И все работает, уже обрадовалась самой себе, но... заметила, что если открытка работает больше 5-10 минут начинает ужасно тормозить, провела несколько экспериментов и обнаружила, что при вызове setChildIndex создается дополнительный объект. (Использовала setChildIndex и дополнительно смещала клип, причем mc1.gotoAndPlay(2) запускает только один, тот который передвинулся, а все его копии неподвижны). Т.е. при каждом вызове this.setChildIndex(mc1, this.numChildren - 1) увеличивается this.numChildren на единицу. Пыталась удалять их через removeChildAt(this.numChildren - 1); но ничего не помогает. Мальчики помогите пожалуйста, что я делаю не так? Может быть есть другой способ вытаскивать объекты на передний план??? Мне так хочется сделать открытку!!!! Я уже почти плачу. :'( P.S. flash cs4. as3. Добавлено через 3 часа 27 минут Неужели никто девушке не поможет в канун праздника??? |
Было бы здорово увидеть более полный код ;)
А вообще можно попробовать использовать swapChildrenAt() вместо setChildrenIndex(). Хотя вряд ли дело в этом, тут другое что-то скорее всего. |
Вот собственно весь код.
Код AS3:
Код AS3:
|
а те мувики что уже один раз запущены не останавливаются когда перекрываются следующим?
|
Цитата:
|
Вероятно потому что код написан в кадрах, и видимо в каком то кадре есть создание нового мувика, что собственно и повторяется. Либо все это связано как то с .gotoAndPlay(5); Может в с 5го кадра этих мувиков есть код какой то в кадрах.
А вообще проверить легко зависит ли это от перемещения слоя или нет. Замени на вот это: Код AS3:
|
Цитата:
:wacko: Я простенький пример сделала и разместила тут: http://***********/4338495 В нем вся суть отражается. Посмотрите пожалуйста, добрый молодой человек. :) |
Альбина1983, для оформления своего кода надо использовать теги [code][/code]
|
iNils
Спасибо, что все поправили. Постараюсь впредь не нарушать правило! |
Такого я не встречал еще. Очень удивлен таким поведением. Главное duplicateMovieClip() удален, а тут как то само получается, а самое главное зачем его удаляли, если без проблем реализуемо, но это так, отголоски прошлого... Главная причина - наличие более одного кадра и функции addChild / setChildIndex. Смогло без багов заработать только так: кадр должен быть в руте 1 и в нем должно стоять:
Код AS3:
Кстати, для тех кто против кода в кадрах - вынос в класс не помогает, если в мувике больше 2х кадров и в них не стоит stop(). Дублируется именно в переход с последнего кадра на первый. А может и просто на кадр назад.. |
GentleFLASH
Похоже, что вы правы. Все дело в том, что в объектах есть анимации и не один кадр. Хотя почему это играет роль? Объект он и есть объект, да и как тогда менять глубину клипов??!! :wacko: :wacko: :wacko: Поставила ваш код в первый кадр, но цифирьки все-равно тикают. :( Может как-то иначе это реализовать, а то у меня начинается какое-то расстройство нервное на этой почве?! :wacko: Хотела, дура, блин сделать открыточку и вся уже извелась. Была бы программисткой. Придумала вот такой вариант. Нарезать кусочки моих клипов, сделать графический объект и поставить его фоном, а в скрипте менять значения alpha клипов, с тем, чтобы в каждый момент был виден только один клип. Хотя мне и кажется очень корявым такое решения, но похоже деваться некуда. 8 марта уже близко!!! Или все-такие есть возможность менять глубину нестатических объектов (клипов). Ребята, поставьте моему случаю диагноз и пропишите лечение, пожалуйста? :'( |
Рекоммендую перейти на ActionScript1-2, там таких багов нет насколько помню, да и эту открытку гораздо проще сделать именно под ним.
|
Вложений: 1
так устроит?
|
я бы так сделал:
Код AS3:
Этот код я положил в первый кадр флэшки, хотя, конечно, правильнее его сделать отдельным классом. Но логика видна хорошо. |
derhab
Вы мой спаситель. :-* Объясните пожалуйста, почему в моем варианте такая чехорда происходила? Ну и если не затруднит, то один мелкий вопросик. Как сделать, чтобы первая анимация начиналась сразу?? Поставить: Код AS3:
И если так то как лучше сделать задержку? Через таймер? или какую-нибудь пустую функцию и setInterval??? |
Код в кадрах сам по себе не является ошибкой.
Если бы тут были исходники глючного варианта, я бы глянул и, возможно, сказал бы в чем проблема. |
kackbip
На предыдущей странице я описала и выложила показательный пример (ссылка на test.rar) Смещение там для того, чтобы было понятно, что создается дополнительный объект. |
При массовой разработке, когда аниматоры клепают мувики, а программисты должны все это взаимоувязывать в игровом контексте, код в кадрах - это бооооооольшая головная боль. И лучше сразу забыть о том, что он там может быть.
имхо, в кадрах должно быть только три команды - stop(), gotoAndStop(), gotoAndPlay() Сорри за оффтоп. Это не для этой темы |
Цитата:
|
| Часовой пояс GMT +4, время: 11:53. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.