PDA

Просмотр полной версии : Странная работа swapDepths()


Волгоградец
29.09.2008, 18:08
Кто объяснит этот глюк и как его побороть:
Представьте фильм, два кадра. Первый - пустой. Во втором - клип и кнопка.
stop();
nextBut.onRelease = function():Void{
gotoAndPlay(1);
}
mc.swapDepths(10);
trace(mc.getDepth());
trace(this.getInstanceAtDepth(10));
При первом проходе все норм. Трэйс:
10
_level0.mc
Потом начинаются чудеса:
-16381
_level0.mc
:eek:

Wolsh
29.09.2008, 18:30
И в чем же чудеса? Вы когда на второй кадр заходите, там мувик на -16381 нарисован? Нарисован. А то что Вы его на 10 закинули, в первом кадре известно комунибудь? Неизвестно. Там и мувика такого ВООБЩЕ НЕТ. А при втором проходе все всплывает - есть тот, что Вы забросили на 10 и тот, что нарисован в кадре.

Волгоградец
29.09.2008, 18:50
Не понял...
А то что Вы его на 10 закинули, в первом кадре известно комунибудь?
Скрипт во втором кадре. То, что я закинул клип на новую глубину должно стать известно всем, независимо на каком кадре находимся.
А при втором проходе все всплывает - есть тот, что Вы забросили на 10 и тот, что нарисован в кадре.
Вы хотите сказать, что у меня теперь два мувика?

iNils
29.09.2008, 19:00
Не понял...

Скрипт во втором кадре. То, что я закинул клип на новую глубину должно стать известно всем, независимо на каком кадре находимся.

Вы хотите сказать, что у меня теперь два мувика?
Да, два мувика. Первый кадр является ключевым, поэтому флеш восстанавливает его содержимое, согласно данным в swf, а там сказано, что на такой то глубине должен быть такой-то клип. И раз клипа там нет, значит его надо добавить.

Волгоградец
29.09.2008, 19:21
Хм... Оч. интересно. Этого я не знал..
Действительно, создается второй клип - его визуально видно! Однако, его нет в дебаггере!

iNils
29.09.2008, 20:01
Однако, его нет в дебаггере!А там много чего не бывает.

dimarik
30.09.2008, 00:27
iNils, де почитать про ето?

iNils
30.09.2008, 01:26
iNils, де почитать про ето?Частичное представление можно получить в спецификации формата SWF, глава Display List

dimarik
30.09.2008, 01:47
Гм, явного упоминания этого феномена здесь ( "http://www.adobe.com/devnet/swf/pdf/swf_file_format_spec_v9.pdf) не нашел. Но, видимо, нужно на свежую голову. Спасибо за совет.

etc
30.09.2008, 02:44
Про копирование мувиков уже была когда-то тема… Вроде.

iNils
30.09.2008, 02:46
Это между строк написано.
Для добавления объекта в дисплейный список, используется тег PlaceObject2 или PlaceObject3 (расширен для использования blendmode), у него есть обязательное поле Depth, по которому идентифицируется символ, а вовсе не по имени. Соответственно, раз глубина изменилась, то идентифицировать символ нельзя, но быть то он должен, мы ведь попали на ключевой кадр, а в нем опять выполняется содержимое тега PlaceObject2, поэтому создается новый символ.

Mur4ik
30.09.2008, 03:07
Не совсем понятно...
Если кадр пустой, но является ключевым, то в нем по-любому какие-то символы ищутся?

iNils
30.09.2008, 03:27
Только те, что описываются в swf.

Wolsh
30.09.2008, 15:36
При заходе на первый кадр плеер читает файл. Там сказано, что на втором кадре на глубине -16...... находится экземпляр символа .... Плеер его туда и помещает. Экземпляр, висящий в это время на глубине 10, в файле свф не описан - он там появился программно. Поэтому с ним плеер ничего не делает (в смысле не удаляет, как надо бы по идее) В результате у нас два экземпляра, что самое неприятное - с одинаковым instance name.

Mur4ik
30.09.2008, 17:28
to iNils:
а какие описываются в swf?

to Wolsh:
И как же тогда решать проблему двух клипов с одинаковыми инстанснеймами?
Это же из-за такого по незнайке можно мозг себе сломать чтоб выявить причину глюков...

iNils
30.09.2008, 17:50
to iNils:
а какие описываются в swf?
Созданные в среде разработке и помещенные на таймлайна.
to Wolsh:
И как же тогда решать проблему двух клипов с одинаковыми инстанснеймами?Не должно быть двух клипов с одинаковым именем.

Wolsh
30.09.2008, 18:04
Да просто надо либо анимашки делать на таймлайне, либо программировать. Если второе, то забываем про кадры и наслаждаемся компанией из аттач/ремув и событий. Надо не решать проблему с именами, а не допускать ее возникновения. Не должно быть второго клипа, не будет и проблемы с именами)

Mur4ik
01.10.2008, 02:24
1000 извинений если это уже оффтоп, но как же не допускать если в данном случае их создалось два и при чем, как Вы говорите, с одинаковыми именами?
Я с таким, просто, еще не сталкивался, но смотрю что тема такая можно рано или поздно на такие грабли наступить,
вот и пытаюсь для себя уяснить что к чему.

Волгоградец
01.10.2008, 10:29
Либо работаешь "вручную", т.е. ручками раскладываешь все клипы по местам и забываешь про программную манипуляцию глубинами, либо все клипы аттачишь из библиотеки.