Опубликован: 23.12.2005 | Уровень: специалист | Доступ: платный | ВУЗ: Московский физико-технический институт
Лекция 13:

Методика организации командной работы над Flash-проектом

runtime-загрузчики

При использовании runtime sharing вы можете столкнуться с еще одной проблемой. Ваши флэш-ролики почему-то прекрасно работают с локального диска, но не работают с web-сервера. Или не работают на MacOS. Точнее, вроде бы работают, но символы, которые подгружаются с помощью runtime sharing, не работают. Почему это так, до конца не ясно. Но мы придумали способ, с помощью которого можно решить эту проблему.

В каждый *.swf-файл, из которого импортируются символы, нужно положить один дополнительный пустой символ и настроить ему такие же параметры runtime sharing, как и всем остальным символам из этого *.swf-файла. Затем в "клиентском" флэш-ролике нужно создать специальную предварительную сцену (если вы забыли, как создавать сцены, см. третью лекцию). По одному экземпляру каждого из вышеупомянутых пустых символов (один символ на каждый *.swf-файл, откуда что-либо импортируется) нужно затем поместить на эту сцену (которая будет проигрываться до основного содержимого вашего ролика).

Это действие приводит к нужному результату: похоже, что в таком случае весь *.swf-файл загружается заранее, после чего все другие определенные в нем символы можно использовать без проблем.

Контролируемая загрузка клипов

Представьте себе такую ситуацию. Вы выкладываете свой готовый, протестированный проект на удаленный сервер и видите, что ничего не работает. По крайней мере, при первом открытии веб-страницы, потому что после нажатия Refresh все, скорее всего, загрузится нормально.

В чем же дело?

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

Например, код в уже загруженных клипах "убежал" вперед и выполнился до выполнения кода еще не загруженных клипов, хотя планировалось все наоборот.

Чтобы решить эту проблему, нужно как-то отследить момент загрузки всех клипов, и только после этого начать выполнять нужный код. Как это сделать?

У runtime-shared модулей есть такое свойство: пока модуль (*.swf) полностью не загрузится, никакие клипы в нем играть не начнут. Этим можно воспользоваться.

Создадим в каждом из *.swf-модулей по пустому символу, в каждом из которых поместим приблизительно такой код:

if (_global.swfModulesCounter == undefined)
_global.swfModulesCounter = 0;
global.swfModulesCounter++;

Этот код увеличивает счетчик загруженных .swf-модулей на единицу.

Теперь можно поместить в отдельной сцене флэш-ролика все эти пустые символы, а в нужном месте (в котором и предстоит ожидать загрузки всех модулей) сделать трехкадровый цикл с проверкой значения счетчика. Если оно достигло общего числа нужных *.swf-модулей - значит, можно продолжать выполнение.

алексеи федорович
алексеи федорович
Беларусь, рогачёв
Тамара Ионова
Тамара Ионова
Россия, Нижний Новгород, НГПУ, 2009