Flash CS3 на дворе, но вечный вопрос задается все чаще: как сделать, чтобы предзагрузчик моего флэш-сайта стартовал не с 75 процентов, а с 1? В том числе и во Flash CS3?
Причина такого поведения очень проста: ваш предзагрузчик появляется, когда целиком загружен первый кадр клипа (предполагаем, что прелоадер находится внутри загружамого им приложения). Если первый кадр "тяжелый" и весит 75% от общего размера -- то и прелоадер честно появляется только после того, как эти 75% будут загружены.
Чтобы решить проблему, нужно уменьшить эти 75% до 1%. Сначала разберемся, из чего они состоят. А это:
Следовательно, нужно:
1. В свойствах КАЖДОГО элемента библиотеки снять флаг "Export in first frame" и ВРУЧНУЮ экспортировать его в нужный кадр приложения, идущий ПОСЛЕ прелоадера, но ДО первого использования данного элемента. Для этого я организовываю свои флэш-приложения таким образом: создаю спец. слой "export assets", в котором и размещаю вручную все экспортируемые элементы ВНЕ СЦЕНЫ; обратите внимание, что в 10 кадр этого слоя элементы экспортируются, а в 11 кадре их уже нет:
Основное приложение стартует с 20 кадра (метка "app init"); в своих проектах вы можете использовать другие интервалы: например, экспортировать в 3 кадр и запускать приложение в четвертом; я же опытным путем пришел к тому, что чувствую себя комфортно при таком несколько избыточном разносе элементов (ага, а в GW Basic строки нумеровались через 10. Славное было время -- компьютерный кружок, ПЭВМ "Поиск"...)
2. В настройках публикации указать, что классы должны экспортироваться не в первый кадр, как это происходит по умолчанию, а в выбранный вами. В данном примере -- это тот же 10 кадр. Итак, идем в меню Publish Settings > Flash > Actionscipt 2.0 Settings > и в поле "Export frame for classes" (номер кадра в который будет экспортироваться шрифт) вводим 10 (в данном случае). Внимание: для Flash 9 / CS3 / AS3 - мегаважное замечание от __etc!)
Этих действий должно быть достаточно, чтобы ваш прелоадер, размещенный ДО кадра экспорта, стартовал с нуля процентов.
3. Если, конечно, сам прелоадер не весит полмегабайта. Впрочем, даже для этих ситуаций есть выход: делаем прелоадер прелоадера, а затем - сам прелодер. Думаете, шучу? На практике приходится решать даже такие задачи, и ради одной цели: с точки зрения посетителя прелоадера быть не должно вообще.
У рецепта есть тонкости.
Как правило, все мувиклипы нужно вручную экспортировать в кадр, предшествующий кадру экспорта классов: в результате флэш-приложение загружает сначала графику, а затем -- классы, этой графикой управляющие. Но если вы используете компоненты и их скины, вам может понадобиться экспортировать их именно в том же кадре, что и классы -- очевидно, это следствие тесной взаимосвязи классов, скинов и компонентов.
В результате может получиться такая модель: в 9-й кадр экспортируются все не-компоненты, а в 10-й -- компоненты, скины и классы.
Выглядит запутанно, но если вы будете держать в голове главную мысль -- "каждый объект должен быть экспортирован до свего первого использования" -- то вам станет значительно легче наводить порядок в проекте и при этом стартовать прелоадер с нуля процентов.
Убрав для звука в библиотеке галочку "Export in first frame", и разместив звук в выбранном кадре экспорта (для чего вам может понадобиться еще один слой, назовем его, например "export sound assets"), зайдите в Properties этого кадра и выберите данный звук. А затем в поле Sync выберите значение Stop, чтобы он вдруг спонтанно на зазвучал - пишет -V-. Теперь он контролируется, как любой другой залинкованный звук.
Шрифт экспортируется в тот кадр приложения, в котором впервые встречается текстовое поле, использующее этот шрифт - как верно замечает __etc.
Поэтому все мувиклипы, содержащие такие текстовые поля, должны экспортироваться не в первый кадр, а в выбранный вами кадр экспорта -- как было описано выше.
В ситуации же, когда вы хотите в прелоадере использовать тот самый шрифт, что и в основном приложении, можно воспользоваться советом от meanjerk:
"Касательно текстов - если в первом кадре нужно использовать текст, причем критично, чтобы он был таким же, что и в последующих кадрах, но с меньшим кол-вом символов, скажем это 11 Arial bold, то в первом кадре делаем этот текст не Arial, а скажем, Arial Cyr или Arial Greek. Если аналога шрифта не нашлось, придется попариться с дублированием шрифта в библиотеку (для использования в _последующих_ кадрах, а не в первом), что может увеличить общий вес ролика, но проблему все же решит."
Этим вопрос со шрифтами не исчерпан.
Все еще неясно? Почитайте здесь:
Важно! Пользователи Flash CS3, читайте заметку от Дениса Коляко: Экспорт классов во второй кадр и создание прелоадера во Flash CS3.
Отличная статья, спасибо Рост, я только почти созрел на изучение этой проблемы для цс3) а тут ты все так аккуратненько собрал!
На здоровье, Илья. Зная твои способности просто уверен - тебе будет что сюда добавить, так что не стесняйся, пиши :)
О вечном. Всем кто работает во флеше CS3 надо давать медаль. Большую-большую. До сих пор немогу привыкнуть к его """фишкам""".
Имхо проще не извращаться и делать внешний прелоадер. Более того, тогда основной мувик можно шифровать, что несколько улучшит защиту от декомпиляторов (ASV 6 выйдет в сентябре)
Это экономит массу времени на более интересные и творческие задачи:)
DL1t, это далеко не всегда удобно.
Ребята, а у меня вопрос: поле "Export frame for classes" принимает только числовые значения ? Если мне необходимо указать другую, нежели чем первую, сцену, то как поступить ? Или, может быть, в этом случае кадры имеют сквозную нумерацию ?
Да, только числовые. Сцен в SWF не существует. Узнать номер кадра текущей сцены можно простым трейсом _currentframe в первом кадре сцены.
Елисей, профессиональное флэш-сообщество пришло к выводу, что от использования сцен лучше отказаться в принципе, так как они порождают слишком много путаницы, связанной с тем, что внутри SWF-файла их действительно совсем нет - там нумерация плоская. Так, первый кадр второй сцены идет сразу за последним кадром первой. Это создает массу неудобств - от сцен лучше отказаться.
У меня вопрос к присутствующим - есть ссылка на статью по теме отказа от сцен? Вопрос возникает часто.
Предыдущий пост
Следующий пост