Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.03.2010, 10:44
Альбина1983 вне форума Посмотреть профиль Отправить личное сообщение для Альбина1983 Найти все сообщения от Альбина1983
  № 1  
Ответить с цитированием
Альбина1983

Регистрация: Mar 2010
Сообщений: 8
По умолчанию Дублирование movieclip при использовании setChildIndex.

Сделала небольшую открыточку.
Состоит из 5 объектов - movieclip (mc1, mc2, ... mc5), которые расположены в основной сцене. Во всех mc в первом кадре стоит stop().
Вызываю в первом кадре основной сцены
Код AS3:
var i:Number = Math.random();
В зависимости от значения i запускаю анимацию того или иного mc.
Например
Код AS3:
mc1.gotoAndPlay(2).
Дополнительно надо чтобы он был на переднем плане, почитала и сделала так:
Код AS3:
this.setChildIndex(mc1, this.numChildren - 1);
Т.е. проигрывается анимация случайного клипа на переднем плане и так в цикле.
И все работает, уже обрадовалась самой себе, но... заметила, что если открытка работает больше 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.
Старый 04.03.2010, 14:48
GentleFLASH вне форума Посмотреть профиль Отправить личное сообщение для GentleFLASH Найти все сообщения от GentleFLASH
  № 2  
Ответить с цитированием
GentleFLASH

Регистрация: Apr 2009
Сообщений: 117
Было бы здорово увидеть более полный код
А вообще можно попробовать использовать swapChildrenAt() вместо setChildrenIndex(). Хотя вряд ли дело в этом, тут другое что-то скорее всего.


Последний раз редактировалось GentleFLASH; 04.03.2010 в 14:56.
Старый 04.03.2010, 15:06
Альбина1983 вне форума Посмотреть профиль Отправить личное сообщение для Альбина1983 Найти все сообщения от Альбина1983
  № 3  
Ответить с цитированием
Альбина1983

Регистрация: Mar 2010
Сообщений: 8
Вот собственно весь код.
Код AS3:
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);
}
Пробовала вот так:
Код AS3:
this.swapChildrenAt(getChildIndex(mc1), this.numChildren-1);
но результат тот же через какое-то время начинает тормозить..


Последний раз редактировалось iNils; 04.03.2010 в 16:25.
Старый 04.03.2010, 15:22
derhab вне форума Посмотреть профиль Отправить личное сообщение для derhab Найти все сообщения от derhab
  № 4  
Ответить с цитированием
derhab
 
Аватар для derhab

Регистрация: Apr 2001
Адрес: Berlin
Сообщений: 1,862
Отправить сообщение для derhab с помощью ICQ Отправить сообщение для derhab с помощью Skype™
а те мувики что уже один раз запущены не останавливаются когда перекрываются следующим?
__________________
freelance | Раздор

Старый 04.03.2010, 15:27
Альбина1983 вне форума Посмотреть профиль Отправить личное сообщение для Альбина1983 Найти все сообщения от Альбина1983
  № 5  
Ответить с цитированием
Альбина1983

Регистрация: Mar 2010
Сообщений: 8
Цитата:
Сообщение от derhab Посмотреть сообщение
а те мувики что уже один раз запущены не останавливаются когда перекрываются следующим?
внутри мувиков на первом кадре стоит Stop();

Старый 04.03.2010, 15:54
GentleFLASH вне форума Посмотреть профиль Отправить личное сообщение для GentleFLASH Найти все сообщения от GentleFLASH
  № 6  
Ответить с цитированием
GentleFLASH

Регистрация: Apr 2009
Сообщений: 117
Вероятно потому что код написан в кадрах, и видимо в каком то кадре есть создание нового мувика, что собственно и повторяется. Либо все это связано как то с .gotoAndPlay(5); Может в с 5го кадра этих мувиков есть код какой то в кадрах.
А вообще проверить легко зависит ли это от перемещения слоя или нет.
Замени на вот это:

Код AS3:
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;
если напечатанный afterA будет больше, чем before, то дело действительно в смене слоя мувика. А если нет - то дело в другом.

Старый 04.03.2010, 16:08
Альбина1983 вне форума Посмотреть профиль Отправить личное сообщение для Альбина1983 Найти все сообщения от Альбина1983
  № 7  
Ответить с цитированием
Альбина1983

Регистрация: Mar 2010
Сообщений: 8
Цитата:
Сообщение от GentleFLASH Посмотреть сообщение
Вероятно потому что код написан в кадрах, и видимо в каком то кадре есть создание нового мувика, что собственно и повторяется. Либо все это связано как то с .gotoAndPlay(5); Может в с 5го кадра этих мувиков есть код какой то в кадрах.
Я попробовала поставить, что вы сказали, но я не понимаю где смотреть трассировку.


Я простенький пример сделала и разместила тут: http://***********/4338495
В нем вся суть отражается. Посмотрите пожалуйста, добрый молодой человек.

Старый 04.03.2010, 16:25
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 8  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Альбина1983, для оформления своего кода надо использовать теги [code][/code]
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 04.03.2010, 16:42
Альбина1983 вне форума Посмотреть профиль Отправить личное сообщение для Альбина1983 Найти все сообщения от Альбина1983
  № 9  
Ответить с цитированием
Альбина1983

Регистрация: Mar 2010
Сообщений: 8
iNils
Спасибо, что все поправили. Постараюсь впредь не нарушать правило!

Старый 04.03.2010, 17:13
GentleFLASH вне форума Посмотреть профиль Отправить личное сообщение для GentleFLASH Найти все сообщения от GentleFLASH
  № 10  
Ответить с цитированием
GentleFLASH

Регистрация: Apr 2009
Сообщений: 117
Такого я не встречал еще. Очень удивлен таким поведением. Главное duplicateMovieClip() удален, а тут как то само получается, а самое главное зачем его удаляли, если без проблем реализуемо, но это так, отголоски прошлого... Главная причина - наличие более одного кадра и функции addChild / setChildIndex. Смогло без багов заработать только так: кадр должен быть в руте 1 и в нем должно стоять:

Код AS3:
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);
 
	}
}
где 70 - это интервал в кадрах.

Кстати, для тех кто против кода в кадрах - вынос в класс не помогает, если в мувике больше 2х кадров и в них не стоит stop(). Дублируется именно в переход с последнего кадра на первый. А может и просто на кадр назад..


Последний раз редактировалось GentleFLASH; 04.03.2010 в 17:26.
Создать новую тему Ответ Часовой пояс GMT +4, время: 06:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
setChildIndex дубль

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 06:02.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.