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

FLASH, И ГОТОВО! Красивое меню-трансформер

Iv (dembicki@narod.ru)

Спецвыпуск Xakep, номер #027, стр. 027-066-7


Обрати внимание, что я добавил 4 к значениям ширины и высоты ролика. Дело в том, что почему-то размер ролика всегда определяется на 4 пиксела меньше. В этом легко убедиться, если восстановить окно из полноэкранного режима в обычный (нажать кнопочку рядом с кнопкой закрытия окна). И если ролику установлены размеры, например, 100х200, то Stage.width и Stage.height примут значение 96х196.

Тебе осталось насоздавать свои странички, переделать xml, воткнуть это меню в левый фрейм, а правый фрейм обозвать "mainFrame" во фрейсете.

АНТИКЭШ

Ты обязательно должен учесть то обстоятельство, что у юзверя закэшируется и меню, и запрашиваемый xml. Поэтому, если будешь вносить изменения в меню, рекомендую его просто переименовывать, добавляй, например, номер версии в имя. А чтобы не кэшировался xml, такое решение будет не лучшим. Я бы рекомендовал просто добавить в запрос уникальный параметр. Идеально для этого случая подходит количество миллисекунд, возвращаемое функцией getTime. Замени запрос на получение xml на this.input_xml.load("flash_menu.xml?r="+new Date().getTime());

и тестани - в режиме теста будет выдано сообщение об ошибке открытия файла. Но этого не произойдет в реальной сети.

Чтобы этот трабл нас в дальнейшем не беспокоил, создадим функцию, которая будет проверять, в он-лайне или локально просматривается ролик, и если в он-лайне, то добавлять антикэш.

function antiCash(address) {

if (_url.substr(0, 4) == "file") {

return address;

}

if (address.indexOf("?") != -1) {

return address+"&r="+new Date().getTime();

} else {

return address+"?r="+new Date().getTime();

}

}

Теперь можно заменить запрос на получение xml на:

this.input_xml.load(_root.antiCash("flash_menu.xml"));

Заметь, если ты захочешь получать xml от серверного скрипта с параметрами, то запрос вида:

this.input_xml.load(_root.antiCash("flash_menu.php?page=main"));

обработается корректно, строка url соберется в такую:

flash_menu.php?page=main&r=237546894375

В процессе написания статьи у моего бета-тестера (мои благодарности, mr.Donor) возник закономерный вопрос: "А как сделать, например, анимацию появления элементов меню?". Я согласен с тем, что для неопытного человека это может вызвать массу затруднений. Давай разбираться. Первым делом изменим функцию onLoad общего класса: расставим мувиклипы слева от экрана, но каждый на своем месте по высоте.

g_tmp.onLoad = function() {

var nod = _root.input_xml[this.i];

this._y = (this.i-1)*20;

// эта строка изменилась

this.x = nod.attributes.tab*20;

// эти 2 строки добавились

this._x = -100;

this.counter = this.i*5;

//

this.icon.stop();

this.name_txt.autoSize = true;

this.name_txt.text = nod.attributes.name;

};

Итак, что мы сделали? мы не стали расставлять мувики сразу по оси _x в нужные места, а только установили им цель: this.x Также задали this.counter - переменная, которая будет определять задержку старта движения мувиклипа. Эта переменная рассчитывается как номер мувика, умноженный на любое число (попробуй поизменять это число и посмотри, что получится).

Назад на стр. 027-066-6  Содержание  Вперед на стр. 027-066-8