Здравствуйте.
Понимаю что писать код на таймлайне – плохой тон, но, увы, иначе пока не умею.
Ситуация такая: есть меню из 5 элементов, при появлении на сцене по-умолчанию должны стоять на первом кадре (просто текст), при наведении мыши
miAnimateOver вызывается функция
FrameNum(animTo) где FrameNum – функция запускающая таймер а animTo – функция передаваемая в таймер для постоянного получения текущего значения currentFrame в клипе. Аналогично и
сmiAnimateOut. Обе функции вызываются с функции
dispCurFrame которая в свою очередь также вложена в
FrameNum и отвечает за фиксирование активного элемента меню.
Все работает кроме одного но. При смене активного меню, элемент который был активным до этого не прячется автоматически, только после наведения на него мышью, то есть
miAnimateOut.
За активное меню отвечает переменная
num, за элемент меню с которым работаем - MovieClip(root).
currentMenuItem
Суть моего вопроса будет даже не в том как исправить код, а в том как можно получить текущий фрейм во время проигрывания не используя Timer.
Код AS3:
import flash.events.Event;
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
//=============================================================================
var forCurFrame:Timer = new Timer(1, 0);
var num:Number = 0;
//=============================================================================
stop();
FrameNum(dispCurFrame);
area.buttonMode = true;
area.addEventListener(MouseEvent.MOUSE_UP, changePage);
//=============================================================================
function animTo(e:TimerEvent):void{
if (currentFrame == 30){
stop();
forCurFrame.stop();
}else if (currentFrame == 1){
gotoAndPlay("s1");
}
}
function animFrom(e:TimerEvent):void{
if (currentFrame == 30){
gotoAndPlay("s2");
forCurFrame.stop();
}else if (currentFrame > 51){
gotoAndStop(1);
}
}
function FrameNum(neededFunction){
forCurFrame.start();
forCurFrame.addEventListener(TimerEvent.TIMER, neededFunction);
}
function dispCurFrame(e:TimerEvent):void{
if ((MovieClip(root).currentMenuItem == this.name) && (num==1)){
gotoAndStop(30);
}else{
num = 0;
//if((currentFrame == 30)&&(MovieClip(root).currentMenuItem != this.name)){gotoAndPlay("s2");}else if (currentFrame >51){gotoAndStop(1);}
area.addEventListener(MouseEvent.MOUSE_OVER, miAnimateOver);
area.addEventListener(MouseEvent.MOUSE_OUT, miAnimateOut);
}
}
function changePage(e:MouseEvent):void{
switch(this.name){
case "menuitem1":
MovieClip(root).currentMenuItem = this.name;
break;
case "menuitem2":
MovieClip(root).currentMenuItem = this.name;
break;
case "menuitem3":
MovieClip(root).currentMenuItem = this.name;
break;
case "menuitem4":
MovieClip(root).currentMenuItem = this.name;
break;
case "menuitem5":
MovieClip(root).currentMenuItem = this.name;
break;
case "menuitem6":
MovieClip(root).currentMenuItem = this.name;
break;
}
forCurFrame.start();
num=1;
area.removeEventListener(MouseEvent.MOUSE_OUT, miAnimateOut);
trace (MovieClip(root).currentMenuItem);
}
function miAnimateOver(e:MouseEvent):void{
FrameNum(animTo);
}
function miAnimateOut(e:MouseEvent):void{
FrameNum(animFrom);
}