![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2010
Сообщений: 8
|
Сделала небольшую открыточку.
Состоит из 5 объектов - movieclip (mc1, mc2, ... mc5), которые расположены в основной сцене. Во всех mc в первом кадре стоит stop(). Вызываю в первом кадре основной сцены В зависимости от значения i запускаю анимацию того или иного mc. Например Дополнительно надо чтобы он был на переднем плане, почитала и сделала так: Т.е. проигрывается анимация случайного клипа на переднем плане и так в цикле. И все работает, уже обрадовалась самой себе, но... заметила, что если открытка работает больше 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 минут Неужели никто девушке не поможет в канун праздника??? Последний раз редактировалось iNils; 04.03.2010 в 16:25. |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 117
|
Было бы здорово увидеть более полный код
![]() А вообще можно попробовать использовать swapChildrenAt() вместо setChildrenIndex(). Хотя вряд ли дело в этом, тут другое что-то скорее всего. Последний раз редактировалось GentleFLASH; 04.03.2010 в 14:56. |
|
|||||
|
Регистрация: Mar 2010
Сообщений: 8
|
Вот собственно весь код.
var i:Number = Math.random(); if (i<0.2) { this.setChildIndex(mc1, this.numChildren-1); mc1.gotoAndPlay(5); } if (i>=0.2 && i<0.4) { this.setChildIndex(mc2, this.numChildren-1); mc2.gotoAndPlay(5); } if (i>=0.4 && i<0.6) { this.setChildIndex(mc3, this.numChildren-1); mc3.gotoAndPlay(5); } if (i>=0.6 && i<0.8) { this.setChildIndex(mc4, this.numChildren-1); mc4.gotoAndPlay(5); } if (i>=0.8 && i<=1) { this.setChildIndex(mc5, this.numChildren-1); mc5.gotoAndPlay(5); } но результат тот же через какое-то время начинает тормозить.. Последний раз редактировалось iNils; 04.03.2010 в 16:25. |
|
|||||
|
Регистрация: Mar 2010
Сообщений: 8
|
внутри мувиков на первом кадре стоит Stop();
|
|
|||||
|
Регистрация: Apr 2009
Сообщений: 117
|
Вероятно потому что код написан в кадрах, и видимо в каком то кадре есть создание нового мувика, что собственно и повторяется. Либо все это связано как то с .gotoAndPlay(5); Может в с 5го кадра этих мувиков есть код какой то в кадрах.
А вообще проверить легко зависит ли это от перемещения слоя или нет. Замени на вот это: var i:Number = Math.random(); var mc_tmp:MovieClip; if (i<0.2) { mc_tmp = mc1; } else if (i>=0.2 && i<0.4) { mc_tmp = mc2; } else if (i>=0.4 && i<0.6) { mc_tmp = mc3; } else if (i>=0.6 && i<0.8) { mc_tmp = mc4; } else { mc_tmp = mc5; } trace( "before: " + this.numChildren ); this.setChildIndex(mc_tmp, this.numChildren-1); trace( "afterA: " + this.numChildren ); mc_tmp.gotoAndPlay(5); trace( "afterB: " + this.numChildren ); mc_tmp = null; |
|
|||||
|
Регистрация: Mar 2010
Сообщений: 8
|
Цитата:
![]() Я простенький пример сделала и разместила тут: http://***********/4338495 В нем вся суть отражается. Посмотрите пожалуйста, добрый молодой человек. ![]() |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Альбина1983, для оформления своего кода надо использовать теги [code][/code]
|
|
|||||
|
Регистрация: Mar 2010
Сообщений: 8
|
iNils
Спасибо, что все поправили. Постараюсь впредь не нарушать правило! |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 117
|
Такого я не встречал еще. Очень удивлен таким поведением. Главное duplicateMovieClip() удален, а тут как то само получается, а самое главное зачем его удаляли, если без проблем реализуемо, но это так, отголоски прошлого... Главная причина - наличие более одного кадра и функции addChild / setChildIndex. Смогло без багов заработать только так: кадр должен быть в руте 1 и в нем должно стоять:
addEventListener( Event.ENTER_FRAME, OEF ); var _frame:int = int.MAX_VALUE-1; function OEF( e:Event ):void { if( ++_frame > 70 ) { _frame = 0; var f:Number = Math.random(); text1.text = String(this.numChildren); text2.text = String(getChildIndex(mc1)); setChildIndex( mc1, this.numChildren-1 ); mc1.gotoAndPlay(2); } } Кстати, для тех кто против кода в кадрах - вынос в класс не помогает, если в мувике больше 2х кадров и в них не стоит stop(). Дублируется именно в переход с последнего кадра на первый. А может и просто на кадр назад.. Последний раз редактировалось GentleFLASH; 04.03.2010 в 17:26. |
![]() |
![]() |
Часовой пояс GMT +4, время: 06:02. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| setChildIndex дубль |
|
|