Потребител Парола | Регистрация | Забравена парола
Меню
· Начало
· Файлове
· Форум
· Връзки
· Категории на уроците
· За контакти
· Фото галерия
· Търсене
Кажи на приятел

Вашия email:
email на приятел:
Копие за вас?
Реклама

Футуристично меню с Flash

FlashВ този урок ще ви покажа как да си направите атрактивно меню от вълнообразно подредени топчета. Ще използваме малко математика и ако сте запознати със синус ще ви е по-лесно.
На теория:
• Ще подредим 10 топчета в средата на сцената. Направете сцената малко по-голяма, в зависимост от големината на топчетата.
• За всяко топче ще посочим ъгъл. На практика ъгъл не съществува (две рамена, една допирна точка), но ще иползваме свойства на синус, така че ще трябва да разделим 360 градуса на броя на топчетата, за да се различава позицията на всяко топче от другите.
Вероятно сте виждали в учебниците по математика изобщражение на торта нарязана на парчета. Това ще направим и ние.
• Ще обозначим текущото (последно посоченото) топче с число, според което "парчетата на тортата" ще се изместят. Така ще се получи, че посоченото топче застава по-средата, а останалите се подреждат според него.
• Позициите на топчетата не се сменят моментално, а плавно. Това се постига, чрез една малка формулка, която ще достигне желания ъгъл плавно. Още повече, че честота на кадрите ще зададем да бъде ок. 30 fps.
Направете си едно топче с Oval Tool. Около 30 пиксела ще са достатъчно. F8 -> MovieClip и сложете Registration point в средата. Още докато го правите MovieClip натиснете Advanced от прозорчето (ако не сте го натиснали) и изберете отметката "Export for ActionScript". Полето Identifier вече трябва да е активно - въведете в него btn. Чрез този identifier ще размножим топчетата, като го викаме от Library. Сега изтрийте топчето от сцената. Засега няма да ни трябва.
Трябва да направим и бутони, които всъщност ще улавят движението на мишката. Направете един правоъгълник с дължина 60 пиксела и височина 250 пиксела. Повторете процедурата с топчетата, само че в полето identifier сложете btn_back.
Вече сме готови да пристипим към кода. Посочете фрейм и отворете Actions панела (F9). На първо време, преди да пишете в панела вижте дали на него пише "Actions - frame". Ако фреймовете ви са повече от един сложете stop(); там къде ще пишете, ако ви е един единствен фрейм - можем да започнем писането.
Като за начало, ще отбележим сцената с променлива - доста удобна техника - след малко ще прикачим топчетата и правоъгълниците на сцената, така че като пишем кода, Flash ще разпознае методите на променлива и ще виждате Code Hints.
var home:MovieClip = this;
Нещо много важно - ще дефинираме променлива, която ще представлява броя на топчетата (съответно на правоъгълниците). Ако четете от XML, ще я дефинирате по-късно, но за сега ще го направим статичен:
var num:Number = 10;
(Десет топчета.)
Оставете 5-6 реда празни - разделете си кода така - най-отгоре променливи, а надолу функции и прочее.
Ще започнем с цикъл for, от 0 до 9 или от 1 до 10, по принцип няма значение, но е добре да започвате от 0 (или според случая), за да не се бъркате.
for(var i:Number=0; i
Дефинираме променлива btn с която ще оперираме по-лесно. Посочваме identifier-a, която вече зададохме в Library. Избираме и instance name за всяко топче, защото после ще ни е нужно да го намираме. i+num+2 - това буквално е дълбочината на всяко топче, 0 - това е дълбочината на сцената (home), не може да има два обекта на една и съща дълбочина, а искаме правоъгълниците да са зад топчетата. Затова прибавяме num.
var btn:MovieClip = home.attachMovie("btn", "btn"+i, i+num+2);
Това е една от ключовите точки в кода. angle е свойство за всяко топче, което ние дефинираме (ООП). Тук си "разрязваме тортата" на парчета. Тъй като функцията синус във флаш очаква радиани, а не градуси, направо ще работим с радиани. 360 градуса, т.е. един пълен кръг е равен на Пи умножено по 2 радиана (3.14 * 2). 3.14 е прекалено неточно, затова ще иползваме Math.PI, което ще го изведе доста по-прецизно. Разделяме цялата "торта" на броя топчета и получаваме парчетата. Умножаваме по нарастващото i от цикъла, което ще направи парчетата на равни разстояния. Т.е. (в градуси) - първото топче ще има ъгъл 0 градуса (i започва от 0), второто парче 36 градуса, третото 72 и т.н.
btn.angle = i*((Math.PI*2)/num);
Една техника, която обичам да прилагам - изчислявам, колко е разтоянието до първото топче от началото на сцената. Ще подредим топчетата едно до друго с 10 пиксела разтояние помжеду им, а аз знам колко топчета ще има (num).
var k:Number = Stage.width/2 - (btn._width*num + 10*(num-1))/2;
Задаваме хоризонталната позиция и центрираме с k.
btn._x = btn._width*i + 10*i + k;
Тук ще иползваме вече зададения "ъгъл", който както вече обясних съществува само на теория. Прибавяме и Stage.height/2, което винаги е средата на сцената. Върнете се горе при променливите и дефинирайте r - радиус, който ще използваме. Направихме бутоните-правоъгълници 250 пиксела, но за радуис това е много, така че задайте около 80:
var r:Number = 80;
Заележете как адресираме ъгъла на всеки бутон (ООП). Стойностите, които връща синус са в интервал от -1 до 1, а нашите ъгли са в равни итервали от 0 градуса до 360 (т.е. от 0 до PI*2). Ако тествате сега ще видите, че топчетата са подредени в средата на сцената и са образували една синусоида.
btn._y = Stage.height/2 + Math.sin(btn.angle)*r;
· smilev на January 17 2011 14:06:37 · 0 Коментари · 1720 Прочитания · Отпечатай
Коментари
Няма добавени коментари.
Напиши коментар
Моля влезте, за да коментирате.
Оценка
Рейтингите са достъпни само за регистрирани.

Моля влезте или се регистрирайте за да гласувате.

Няма оценки.
Вход
Потребител

Парола



Не сте регистрирани?
Натиснете тук за регистрация.

Забравена парола?
Натиснете тук за нова.
Анкета
С каква операционна система работите











Трябва да влезете за да гласувате.
ЧАТ
Трябва да влезате за да пуснете съобщение.

Няма съобщения.
Статистика