Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #26, ЯНВАРЬ 2003 г.

][-desktop - взгляд в небо

ilich (ilich@winfo.org)

Спецвыпуск Xakep, номер #026, стр. 026-086-3


Облако, состоящее из простых одинаковых объектов (один и тот же символ), запомни, жрет намного меньше места. Особенно хорошо запомнить это следует тем, кто публикует Flash - странички в Интернете. Попробуй, например, сравнить размеры fla-шки и swf-ки, которые у тебя сейчас, с теми размерами, которые будут, если все эти овальчики в облаке разбить (выдели их все, нажми Ctrl+B, кликни мышкой в рабочую область рядом с облаком - если не повиснешь, удаляй "G - Cloud" и жми Ctrl+Enter, только сохранись перед этим - это ведь как раз то, чего делать, по-моему, не стоит), и сделать облако одним большим рисунком. У меня разница в размерах swf-ки (то, что публикуется в Инете) составила 13 kb! А это от двух и больше лишних секунд загрузки (гхм... это же надо так ценить время - прим. ред.). Когда во флешке вместо одной большой однообразной картинки используется комбинация из символов ее одинаковых частей, размер фактически экономится за счет производительности машины. Хотя могу заметить, что существенных различий в скорости проигрывания флешки с символами и флешки с большой графикой я не заметил. Все дело в весе. К тому же, в случае с облаком, по-моему, составлять его из мелких овалов было гораздо проще, чем рисовать один относительно сложный рисунок (кстати, это правило относится ко всем графическим изображениям в флешке. Например, символ одиночной звезды, сделанный для последующего многократного использования, я сотворил по привычке :).

Отвлеклись мы немного. Вернемся к облаку. Тащи "C - Clouds" в "C - Sky" на самый верхний слой. Задай ему там такие координаты и размеры, чтобы оно скрылось за границей голубого неба и центр символа облака имел горизонтальную координату -310 (замечу, что координаты в панели "Info" - это координаты верхнего левого угла символа, независимо от того, где у этого символа находится центр; у меня на панели "Info" приблизительно так: X=-540; Y=100).

Дави на облаке правой кнопкой мыши и выбирай там "Actions" (Операции). Вводи там:

onClipEvent (enterFrame) {

if (_x<=-300) {

_y=Int(Math.random()*10)*30;

speed=Int(Math.random()*10);

} else if (_x>=1400) {

_y=Int(Math.random()*10)*30;

speed=-Int(Math.random()*10);

};

_x+=speed;

}

Этот скрипт делает следующее. Функция Math.random() возвращает случайное значение от нуля до единицы. Функция Int() преобразует число в скобках, оставляя от него лишь целую часть. С каждым новым кадром проверяется горизонтальная координата центра облака. Если она меньше трехсот (т.е. облако при таких размерах полностью ушло за пределы экрана влево) или больше тысячи четырехсот (облако ушло за экран вправо), устанавливается новая вертикальная координата: значения при этом могут быть 30, 60, 90 и так далее до 270. Таким же образом вычисляется скорость движения облака, которая при этом получается от единицы до девяти (с плюсом или с минусом). После этой проверки горизонтальная координата облака увеличивается на значение скорости. В случае, когда облако ушло влево, скорость становится положительной, т.е. горизонтальная координата увеличивается (облако начинает плыть вправо), когда облако ушло за экран вправо - уменьшается (облако начинает плыть влево).

Назад на стр. 026-086-2  Содержание  Вперед на стр. 026-086-4