Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.09.2010, 17:26
Dreama вне форума Посмотреть профиль Отправить личное сообщение для Dreama Найти все сообщения от Dreama
  № 1  
Ответить с цитированием
Dreama

Регистрация: Jul 2005
Адрес: Ужгород
Сообщений: 9
Отправить сообщение для Dreama с помощью ICQ
Question Просчет currentFrame с помощью Timer

Здравствуйте.

Понимаю что писать код на таймлайне – плохой тон, но, увы, иначе пока не умею.

Ситуация такая: есть меню из 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);
}
Вложения
Тип файла: rar example.rar (78.2 Кб, 16 просмотров)

Старый 16.09.2010, 18:24
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Вы не поверите. Есть такое событие Event.ENTER_FRAME, возникает на входе в каждый кадр. Зачем вам вообще для этого таймер? Тем более такой который, как вы хотите, обновлялся бы кажду миллисекунду.


Последний раз редактировалось alatar; 16.09.2010 в 18:27.
Старый 16.09.2010, 18:43
Dreama вне форума Посмотреть профиль Отправить личное сообщение для Dreama Найти все сообщения от Dreama
  № 3  
Ответить с цитированием
Dreama

Регистрация: Jul 2005
Адрес: Ужгород
Сообщений: 9
Отправить сообщение для Dreama с помощью ICQ
зы.

и как удалить отсюда теперь этот стыд...

Старый 16.09.2010, 19:03
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Пусть висит. В назидание потомкам.

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:59.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 10:59.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.