![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Лог
------------ Запускаем 0 0 0 0 0 0 Жмем на копку - Делаем аттач 0 1 0 1 0 1 Жмем на кнопку - удаление [и нечего тут нет] [и нечего тут нет] [и нечего тут нет] устал ждать ![]() Удалался бы один, то второй onEnterFrame работал |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Слепой я
Только сейчас заметил, что удаляем с помощью unloadMovie, поэтому:1. По сколько в данном случаи это не глобальный метод, а метод мувиклипа, то у него нет аргуметов. 2. unloadMovie удаляет содержимое экземпляра, а не сам экземпляр. |
|
|||||
|
Регистрация: Jun 2005
Адрес: в Питере
Сообщений: 981
|
Тут такая петрушка получается. Если записать так: clip.ac.unloadMovie() то удаляется ac, clip при этом естесственно остается. А если записать так clip.unloadMovie(), то ac также удаляется а clip типа исчезает со сцены, что естесственно потому что содержимое удалено, но в дебагере видно, что он есть! При этом trace(clip.ac.getDepth()) в обоих случаях выводит: -16..(с копейками), а trace(clip.ac) выводит _level0.clip.ac Очевидное невероятное из цикла "секреты реализации"
![]()
__________________
Делай всё быстро, но не торопись!.._/*o|o*\_. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Листинг 3-х кодов, которые потребуется при чтении
1. Используем заместо оригинала aa.onPress = function () {
if (i == 0 || i == undefined) {
clip.attachMovie ("ac", "ac1", 1);
i = 1;
} else {
clip.ac.unloadMovie ();
i = 0;
trace (clip.ac.getDepth ());
}
};
//***************перемещение************************
_root.clip.ac.onPress = function () {
_root.clip.ac.startDrag ();
};
_root.clip.ac.onRelease = function () {
_root.clip.ac.stopDrag ();
};
_root.onEnterFrame = function () {
for (arg in clip) {
trace (clip[arg] + " " + clip[arg].getDepth());
}
trace ("--------");
};
aa.onPress = function () {
if (i == 0 || i == undefined) {
//clip.ac.swapDepths (100)
clip.attachMovie ("ac", "ac", 1);
i = 1;
} else {
clip.ac.unloadMovie ();
i = 0;
trace (clip.ac.getDepth ());
}
};
//***************перемещение************************
_root.clip.ac.onPress = function () {
//this.startDrag ();
_root.clip.ac.startDrag ();
};
_root.clip.ac.onRelease = function () {
//this.stopDrag ();
_root.clip.ac.stopDrag ();
};
_root.onEnterFrame = function () {
for (arg in clip) {
trace (clip[arg] + " " + clip[arg].getDepth());
}
trace ("--------");
};
this.createEmptyMovieClip ("mcA", 0);
this.mcA.createEmptyMovieClip ("mcB", 0);
this.mcA.createEmptyMovieClip ("mcC", 1);
this.cx = 0;
this.onEnterFrame = function () {
this.cx++;
if (this.cx == 5) {
trace ("unload");
this.mcA.unloadMovie ();
}
trace (this.mcA.mcB);
trace (this.mcA.mcC);
trace (this.mcA);
trace ("---------------");
};
Цитата:
Цитата:
остается на месте, поэтому он и весит в дебагере.Цитата:
но уже в следующем кадре только один потому что выгруз происходит на следующий кадр Единственный "глюк" виден в коде 2. Трейс нам постоянно показывает отрицательную глубину для клипа ac. Жмем кнопку и создаем еще один ac, трейс нам теперь показывает наличие двух ac в clip, но с одинаковой глубиной. Это объясняется тем, что при наличии двух клипов с одинаковым именем, при обращении по этому имени мы получаем доступ к тому клипу, чья глубина меньше (видимо по этому нам дебагер врет, и мы видим в нем только один клип, а не два). Это легко проверить расскоментировав строчку во втором коде со сменой глубины, теперь в трейсе глубина будут от того клипа который мы приаттачили. А собственно клюк заключается в том, что clip.ac.unloadMovie () умудряется удалить первоначальный клип. Но еще более странный глюк получается если расскомментировать строку в со сменой глубины в коде 2. Запускаем и оттаскиваем первоначальный клип ac в сторону, жмем кнопку и добавляем новый клип ac. А теперь наведите на первоначальный, нам нем курсор принимает форму руки, нажимаем и пытаемся его оттащить его...у меня оттаскивается приаттаченный А теперь в том же коде 2 смените часть кода отвечающая за нажатие и отжатие мыши для клипа ac на этот_root.clip.ac.onPress = function () {
this.startDrag ();
//_root.clip.ac.startDrag ();
};
_root.clip.ac.onRelease = function () {
this.stopDrag ();
//_root.clip.ac.stopDrag ();
};
То есть в случае выше, мы назначали событие на первый клип ac, и он и отрабатывался для него же, но внутри код у нас имел абсолютный путь, поэтому при попытки перетащить клип, обращение шло к тому ac чья глубина была меньше, то есть приаттачиному.Последний раз редактировалось iNils; 07.06.2006 в 14:07. |
|
|||||
|
Регистрация: Mar 2006
Сообщений: 92
|
Ёлки-палки!
Вот уж не думал, что мой ламерский вопрос вызовет такую бурную дискуссию! Сколько инфы! Вечером засяду за углубленное изучение ![]() |
|
|||||
|
Регистрация: Jun 2005
Адрес: в Питере
Сообщений: 981
|
Есть еще интересный момент. Если есть клип помещенный в ручную на сцену (clip), а в нем еще один клип (ac), то у нас имеется:
_level0.clip.ac.instance1 Если мы вызовем clip.attachMovie("ac","ac",0) то получим: _level0.clip.ac.instance1 _level0.clip.ac.instance2 если мы удалим вложенный клип и оставим: _level0.clip то при вызове clip.attachMovie("ac","ac",0) получаем: _level0.clip.ac Собственно клипы с одинаковыми именами отличаются друг от друга кроме глубины этим самым instanceN
__________________
Делай всё быстро, но не торопись!.._/*o|o*\_. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Как мне кажется это происходит потому что:
1. В момент запуска флеш в ac находит клип без имени и называет его instance1 (так как других там нет) 2. При аттаче происходипотчи тоже самое что и в 1, но при поиске внутренных клипов, флеш начинает искать через имя ac и соответсвенно попадает на тот что у нас были находит там уже названный instance1, и в новом ac (считая что у нас он один) называет клип без имени уже instance2. Смени строку аттача на И смотри дебаггер У меня получилось так:clip.ac.instance1 clip.ac.instance2 clip.h ![]() |
|
|||||
|
Регистрация: Jun 2005
Адрес: в Питере
Сообщений: 981
|
Цитата:
__________________
Делай всё быстро, но не торопись!.._/*o|o*\_. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
|
|
|||||
|
Регистрация: Jun 2005
Адрес: в Питере
Сообщений: 981
|
Не знаю, видимо совсем эти клипы запарили...
На самом деле действительно instancе имеется у клипов с одинаковыми именами, ну и при отсутсвии имени соответсвенно, ведь можно сделать и так: attachMovie('clip','',0)
__________________
Делай всё быстро, но не торопись!.._/*o|o*\_. |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:52. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|