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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.06.2006, 02:39
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 21  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Лог
------------
Запускаем
0
0
0
0
0
0
Жмем на копку - Делаем аттач
0
1
0
1
0
1
Жмем на кнопку - удаление
[и нечего тут нет]
[и нечего тут нет]
[и нечего тут нет]
устал ждать

Удалался бы один, то второй onEnterFrame работал
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Слепой я Только сейчас заметил, что удаляем с помощью unloadMovie, поэтому:
1. По сколько в данном случаи это не глобальный метод, а метод мувиклипа, то у него нет аргуметов.
2. unloadMovie удаляет содержимое экземпляра, а не сам экземпляр.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 07.06.2006, 11:43
Madasan вне форума Посмотреть профиль Отправить личное сообщение для Madasan Найти все сообщения от Madasan
  № 23  
Ответить с цитированием
Madasan
 
Аватар для Madasan

Регистрация: 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*\_.

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

администратор
Регистрация: 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 ("--------");
};
2. Используем заместо оригинала
Код:
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 ("--------");
};
3. Это для нового пустого файла
Код:
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 ("---------------");
};

Цитата:
Сообщение от Madasan
Тут такая петрушка получается. Если записать так: clip.ac.unloadMovie() то удаляется ac, clip при этом естесственно остается.
Уще раз повторю, unloadMovie() выгружает содержимое клипа к которому он прикручен, но не сам клип. Поставь при аттаче имя нового клипа ac1, вместо ac и ты с помощью кода 1 увидишь что все осталось на месте.
Цитата:
Сообщение от Madasan
А если записать так clip.unloadMovie(), то ac также удаляется а clip типа исчезает со сцены, что естесственно потому что содержимое удалено, но в дебагере видно, что он есть! При этом trace(clip.ac.getDepth()) в обоих случаях выводит: -16..(с копейками)
Клип clip остается на месте, поэтому он и весит в дебагере.

Цитата:
Сообщение от Madasan
а trace(clip.ac) выводит _level0.clip.ac Очевидное невероятное из цикла "секреты реализации"
Смотри код 3. На момент unload мы видим в трейсе все три клипа
Код:
unload
_level0.mcA.mcB
_level0.mcA.mcC
_level0.mcA
но уже в следующем кадре только один
Код:
undefined
undefined
_level0.mcA
потому что выгруз происходит на следующий кадр

Единственный "глюк" виден в коде 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 чья глубина была меньше, то есть приаттачиному.
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 07.06.2006 в 14:07.
Старый 07.06.2006, 14:01
gfdrf вне форума Посмотреть профиль Отправить личное сообщение для gfdrf Найти все сообщения от gfdrf
  № 25  
Ответить с цитированием
gfdrf

Регистрация: Mar 2006
Сообщений: 92
Ёлки-палки!
Вот уж не думал, что мой ламерский вопрос вызовет такую бурную дискуссию! Сколько инфы!
Вечером засяду за углубленное изучение

Старый 07.06.2006, 14:10
Madasan вне форума Посмотреть профиль Отправить личное сообщение для Madasan Найти все сообщения от Madasan
  № 26  
Ответить с цитированием
Madasan
 
Аватар для Madasan

Регистрация: 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*\_.

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Как мне кажется это происходит потому что:
1. В момент запуска флеш в ac находит клип без имени и называет его instance1 (так как других там нет)
2. При аттаче происходипотчи тоже самое что и в 1, но при поиске внутренных клипов, флеш начинает искать через имя ac и соответсвенно попадает на тот что у нас были находит там уже названный instance1, и в новом ac (считая что у нас он один) называет клип без имени уже instance2.
Смени строку аттача на
Код:
clip.attachMovie ("mc", "mc", 1, {_name: "h"});
И смотри дебаггер У меня получилось так:
clip.ac.instance1
clip.ac.instance2
clip.h
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Jun 2005
Адрес: в Питере
Сообщений: 981
Цитата:
Сообщение от iNils
Как мне кажется это происходит потому что:
1. В момент запуска флеш в ac находит клип без имени и называет его instance1 (так как других там нет)
Флэш прилепляет instanceN всем клипам, помещенным на сцену не программно а в среде редактирования, вне зависимости от того, задано ли ему имя в панели свойств или нет.
__________________
Делай всё быстро, но не торопись!.._/*o|o*\_.

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от Madasan
Флэш прилепляет instanceN всем клипам, помещенным на сцену не программно а в среде редактирования, вне зависимости от того, задано ли ему имя в панели свойств или нет.
С чего ты взял?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Jun 2005
Адрес: в Питере
Сообщений: 981
Не знаю, видимо совсем эти клипы запарили...
На самом деле действительно instancе имеется у клипов с одинаковыми именами, ну и при отсутсвии имени соответсвенно, ведь можно сделать и так:
attachMovie('clip','',0)
__________________
Делай всё быстро, но не торопись!.._/*o|o*\_.

Создать новую тему Ответ Часовой пояс GMT +4, время: 08:52.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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