Футуристично меню с Flash
Направихме основите, време е да сложим бутоните за топчетата. Същата процедура като при топчетата, само че тук ще използваме параметъра object init, т.е. обект, който ще е като шаблон за няколко обекта, в случая MovieClip-ове. Обекта ще се казва init, и важно за него е да бъде дефиниран, преди използването му, т.е. ще се върнем малко по-нагоре в кода. Задаваме на правоъгълника _alpha = 0, т.е. ще е невидим. Вече изчислихме k и подреждаме топчетата, така че за хоризонтала просто ще зададем на правоъгълника позицията на топчетата. По вертикал просто ще зададем средата на сцената.
var back:MovieClip = home.attachMovie("btn_back", "back"+i, i+2, init);
back._alpha = 0;
back._x = btn._x;
back._y = Stage.height/2;
Тук пак с ООП ще зададем едно число, това число ще ни помогне да пренаредим топчетата, ще изместим малко парчетата на тортата.
back.I = i;
И затваряме цикъла:
}
Сега се върнете между дефинираните променливи, и цикъла. Тук ще сложим шаблона за правоъгълниците, за който вече говорихме, че трябва да е дефиниран преди да бъде използван. Всъщност работата на този шаблон е при минаване с мишката върху някой бутон-правоъгълник да изведе поредния му номер, който дефинирахме последно в цикъла. Преди това обаче, ще дефинираме още няколко променливи, които ще са ни нужни.
var anchor:Number = 0;
var newAnchor:Number = 0;
var trailer:Number = num;
След това и шаблона. Първоначално trailer е 10, ще видите защо по-късно, но когато мишката посочи някой бутон променливата придобива поредния му номер.
var init:MovieClip = new MovieClip();
init.onRollOver = over;
function over(){
trailer = this.I;
}
Време е да направим и основната функция, която ще движи допчетата. Всъщност тя е много семпла. Ако все още не сте направили фреймовете в секунда 30-40 го направете. След това, след цикъла for или преди него ще запишем функцията.
Тъй като ни трябва плавно движение направихме fps по-голямо, а събитието onEnterFrame изпълнява дефинираната функция много пъти в секунда, или по-точно - колкото са фреймовете. Т.е. функцията ни ще се изпълнява 30 (например) пъти в секунда. Тъй като функцията не е голяма, макар и да има цикъл в нея няма да затрудни много процесорите.
home.onEnterFrame = function(){
Променливата ни anchor ("котва"), дефинирахме със стойност 0. Какво се получава всъщност - тази малка формулка се изпълнява 30 пъти в секунда и постепенно anchor придобива стойността на trailer, който пък се манипулира от посочването на бутоните. Ако изведете anchor с trace ще видите много числа закръглени до около осмия знак, т.е. много прецизни. Задаваме стойността на "котвата" на newAnchor, която всъщност е временна променлива, и се оказва ненужна ако сте разбрали кода, аз я ползвам, защото така ми е по-удобно.
anchor = anchor + (trailer - anchor)/3;
newAnchor = anchor;
Започваме нов цикъл. Пак от 0 до num, или както вие сте го направили, стига да е същия като горния.
for(var i:Number=0; i
Променливата btn ще намира топчетата, които сложихме на сцената, т.е. на home. Върнете се в предишни цикъл, с който го сложихме и ще ви стане по-ясно.
var btn:MovieClip = home["btn"+i];
Тук ще променим ъгъла на всеки бутон. Идеята да е се измести интервала (i - newAnchor). Вече видяхте, че градуси интервала между всяко топче е тридесет и шест (36) градуса, като посочим, да речем второто топче, trailer придобива стойност 1 и тортата не от 0 до 360 градуса, а от -36 (минус тридесет и шест) до 324, а когато се посочи пак първото топче интервала се връща от 0 д0 360 (т.е. от о до Пи * 2). Хубавото на синус е, че стойности извън интервала от 0 до 360, започва от начало т.е. -1 -> 1 -> -1 -> 1... без да се нарушава плавността, т.е. топчетата няма да се телепортират от горе до долу или обратно. В следната графика можете да видите, как се изменят стойностите на синус:
btn.angle = (i - newAnchor)*((Math.PI*2)/num);
Задаваме вертикалната позиция според новия ъгъл.
btn._y = Math.sin(btn.angle)*r + Stage.height/2;
}
}
Автор: accorp
Коментари (5)