Оптимизация
/\_/\_/\ Оптимизация /\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\ Хостинг В Украине бесплатно [http://ho.com.ua/] Оптимизация – как много в этом непонятном слове. Сюда можно включить и ускорение работы скрипта и уменьшение размера ролика, и хитрости ускорения загрузки интерфейса, работа, как с кодом, так и с изображениями, в общем, достаточно разнообразных способов. Условно их можно поделить на уменьшение размера ролика (быстрее загружается), ускорение его работы (не тормозит на слабых машинах). Размер ролика Дляуменьшения размера клипа рекомендую: 1. Зайти в File > Publish Settings, закладка Flash 2. Поставить галочку напротив Generate Size Report. 3. Задать нужные параметры для JPEG quality и Audio (главное не перестараться, не то получиться страшненько). Естественно Audio нужно ставить в формате .mp3. Теперь при публикации (Publish) ролика в отдельном окошке будет показана специальная таблица – размеры каждого элемента клипа отдельно, размеры скрипта для каждого кадра или мувика тоже отдельно, все в байтах. Легче всего уменьшить самый большой элемент. Возможно, некоторые рисунки займут гораздо меньше места, если их перевести в векторный вид. К сожалению, с помощью команды Modify > Bitmap > Trace Bitmap нельзя получить отличный результат, либо качество рисунка здорово ухудшается, либо размер рисунка в векторе увеличивается в несколько раз по сравнению с исходной картинкой. Лучше всего получается «трейсить» руками, положив в отдельном слое исходную картинку в качестве образца, напоминает рисование в детстве в книжке-раскраске, но требует терпения и небольших художественных навыков. По размерам на первом месте стоят звуки и рисунки. Перед публикацией клипа использованием желательно перевести музыку в формат .mp3, а рисунки в формат .jpg, .gif или даже перерисовать в векторный вид. Я надеюсь не нужно объяснять, что невидимые в клипе части рисунков выгоднее обрезать в любом графическом редакторе. С музыкой не легче – если импортировать во Flash целую композицию (песню), а использовать только часть (например, вступление), то я не уверен, что Flash самостоятельно обрежет не используемый кусок мелодии. На следующее место по занимаемому объему можно поставить векторные рисунки. Нередко можно увидеть рисунки, размеры которых можно существенно уменьшить без потери качества изображения, естественно это удобно делать в специализированных редакторах CorelDraw, например. Кое-что может и Flash – команда Modify > Shape > Optimize позволяет неплохо изменять качество изображения (Smooth Сглаживание – это упрощенный вариант команды Optimize). Перейдем к шрифтам. Если ваш ролик содержит нестандартные шрифты или сложную анимацию с текстом, то в него придется импортировать целый шрифт или же отдельные его символы. Как это сделать с помощью скрипта мне неизвестно, ведь скрипт обрабатывается уже после формирования ролика. Вручную это сделать очень просто – заходим в параметры любого текстового поля нашего ролика и выбираем кнопочку «Characters…», переставляем флажок в положение Specify Ranges, затем выбираем, какой набор символов нас интересует или набираем нужные нам символы в нижней строке. Оказывается, все повторяющиеся символы воспринимаются как один, большие и маленькие буквы это разные символы, а пробел это тоже символ. Как правило, меньше всего места занимает скрипт, если конечно он не содержит баз данных или больших массивов. Иногда немного сократить размер ролика (иногда на килобайт!) позволяет перестановка строк (естественно, если эта перестановка не меняет ход выполнения скрипта). Непонятно почему, но если циклы ставить в самом начале скрипта, а «единичные» действия проводить в конце программы то размеры ролика будут минимальными. В общем-то, рекомендую перед окончательной публикацией немного поиграть с порядком команд Скрипта в целом, так и в отдельных крупных циклах. Скорость. На скорость и гладкость анимации скрипта самое большое влияние оказывает частота центрального процессора. Значит, нужно поменьше его грузить всякими расчетами. Правда, если загрузить в ролик фильм, хотя бы 300-400 Мб и попытаться запустить этот ролик, то тормоза появятся в основном потому, что Flash Player попытается загрузить весь ролик в оперативную память. Большую часть расчетов занимает вывод на экран векторных изображений, их анимация и прозрачность. Про оптимизацию изображений я уже говорил – чем меньше размер, тем меньше расчетов. С анимацией тоже все понятно – используй MovieClip и копируй их из библиотеки, сколько душа пожелает (это можно делать как руками, так и с помощью скрипта). А вот с прозрачностью наблюдается некоторая нестыковка – ну далеко не везде можно обойтись без нее – очень уж хороший эффект. Разве что можно подумать о замене анимации на эффекты с масками, где это возможно, да еще постараться не использовать анимацию с прозрачностью и тем более с ее изменением. А теперь немного математики, компьютерной естественно. При составлении формул старайтесь максимально ускорить их выполнение, всем известно, но повторюсь: плюс и минус – самые быстрые действия, потом умножение или возведение в степень, а уже потом деление и извлечение корня. Здорово ускорит работу формул отсутствие деления и извлечения корней (про нахождение синусов и косинусов я уже не говорю). Математические действия с целыми числами проходят быстрее чем с дробными. Немного поподробнее – если нужно узнать, задел ли героя игры выстрел из ракетницы, то нужно просчитать расстояние от героя до эпицентра взрыва (расстояние между координатами «Х» в квадрате плюс расстояние между координатами «У» в квадрате и извлечь из всего этого квадратный корень) сравнить с радиусом действия взрыва итого 7 действий. Придется даже извлекать квадратный корень, а если вместо этого возвести в квадрат радиус действия взрыва, итого те же 7 действий, но уже без корней! можно пойти дальше и начать хранить квадрат радиуса действия взрыва в отдельной переменной (итого 6 действий). А теперь пример логической оптимизации – зачем проверять расстояние от героя до эпицентра взрыва всех ракет? Что если сначала посмотреть далеко ли до снаряда на глазок, например, сравнить расстояние между координатами Х героя и взрыва если оно больше радиуса действия взрыва (простого не в квадрате) то зачем вообще проверять дальше – ракета не попала. Сейчас немного про синусы и косинусы, а точнее про тангенсы. Нередко нужно узнать определенный угол, например, если герой стоит перед дверью, то в какую сторону он смотрит. Если принять координаты героя на плоскости как «нулевые», а координаты точки на линии его обзора (прицела) как дополнительные, то разность между соответствующими координатами и будет длинной катетов воображаемого треугольника (гипотенуза которого проходит от игрока и вдоль линии его обзора). Теперь имея длины катетов можно найти тангенс нужного угла, а зная положительная или отрицательная длины этих самых катетов – получить четверть в которую смотрит герой, т.е. условную зону его обзора. Теперь если запросить арктангенс деления одного катета на другой мы получим угол, который мы искали (заметьте, вычисления проделаны без нахождения длинны гипотенузы и без использования квадратных корней, правда, без арктангенса мне обойтись не удалось). Финал. Пока код программы не доведен до совершенства, а работа над роликом все еще кипит, оставляйте комментарии - пояснения для себя - где что лежит, что трогать не следует и чего надо будет подправить, но потом. И уже в самом конце, когда флешка заживет своей жизнью, сделайте финальную версию без комментариев, оптимизированную и без единой ошибки себе и людям на радость. • Работы • Статьи • D.I.C.E. wars • О нас • ©flash-gears.kiev.ua