Лого Флэша Потрошителя
 
Новости · Статьи · Прототипы · Компоненты · Персоналии · Глоссарий · Идеальный клип · Что делать  
MovieClip.onData против onClipEvent(data)
09.09.2002 01.10.2002

Существует проблема загрузки внешних файлов в мувиклипы, созданные программным путем с помощью метода createEmptyMovieClip(). Проблема состоит в том, что при загрузке внешнего .jpg или .swf файла в программно созданный мувиклип безвозвратно теряются все свойства, определенные на этом мувиклипе. Мы разберемся, как решить эту проблему.

Допустим, вам нужно загрузить клип "toload.swf", содержащий дополнительные элементы дизайна, в ваш основной документ. Клип "toload.swf" должен быть опубликован в той же папке, что и наш основной документ. Сделайте это, чтобы дальнейшее исследование стало возможным.

В основном документе мы создадим пустой мувиклип программным путем и определим на нем обработчик события onData с целью получения событий о загрузке очередной порции данных из файла "toload.swf" в мувиклип, находящийся в основном документе:

this.createEmptyMovieClip("placeholder_mc", 9999)
placeholder_mc.onData = function () // определяем на клипе обработчик события onData
{
    trace("произошло событие onData");
}
placeholder_mc.loadMovie("toload.swf"); // загружаем файл

Этот код не будет работать, как ожидается. В окне вывода output не появится сообщение "произошло событие onData", так как вызов метода placeholder_mc.loadMovie("toload.swf") приводит к уничтожению всех свойств программно созданного мувиклипа placeholder_mc. А обработчик события onData также является свойством, и поэтому также уничтожается.

Выход из этой неприятной ситуации находится в использовании методов Flash 5. При этом нужно вручную создать мувиклип placeholder_mc и поместить его на рабочее поле. Итак:

Создайте пустой мувиклип с именем "dummy" (Меню Insert > New Symbol ... или Ctrl+F8). Перейдите в основную сцену и перетащите символ dummy из библиотеки на рабочее поле. Убедитесь, что экземпляр символа dummy выбран и присвойте экземпляру имя "placeholder_mc";

Откройте панель Actions. Введите следующий код:

onClipEvent (data)
{
trace("произошло событие onData")
}

В первом кадре основной сцены введите код:

placeholder_mc.loadMovie("toload.swf");

Теперь проверим, как это работает. Нажмите Ctrl+Enter. В окне вывода output появится ожидаемое сообщение "произошло событие onData".

Как видите, старые методы Flash 5 все еще актуальны. Их использование не добавит элегантности структуре ваших приложений, но бывают ситуации, когда нужно жертвовать элегантностью в пользу эффективности.

[новое окно]>

Дэдлайн

 

Примечания:
Очень удобно обсуждать подобные вопросы в конференции RuFlash

Статус документа
: публикация
>>> Статьи · Прототипы · Компоненты · Персоналии · Глоссарий · Что делатьНаверх
  © Разработка: Ростислав Сирык · О проекте "Флэш Потрошитель" · Архивы сайта
Flash MX

Стандарты Actionscript

Внутренняя архитектура Actionscript

Атрибуты тэгов OBJECT и EMBED

Метод LoadVars.decode

Свойство Stage.showMenu

System.security.allowDomain

System.showSettings

Динамическое присоединение компонентов

onKeyDown против onClipEvent(keyDown)

Модель событий Flash MX

ASBroadcaster — ядро модели событий Flash MX

Чтение ID3-тэгов из файла .mp3

ASSetPropFlags — функция защиты свойств объектов

Объект Local SharedObject

Удаление Local SharedObject

Глобальный путь к классам

Level против root

Dreamweaver

Создаем расширение для Dreamweaver MX

Настройка Dreamweaver MX

Длинное тире, короткое тире, дефис. Правописание и Dreamweaver

Illustrator

Растеризация текста
FlexiPedia