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

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

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

Регистрация: Feb 2012
Сообщений: 205
По умолчанию один интервал для разных функций

Необходим код, который проигрывает анимацию в прямом или обратном порядке в зависимости от позиционирования мыши относительно середины кадра.
Пока хочу написать хотя бы для постоянного интервала в полсекунды, чтобы кадры переключались и вперёд и назад с этим интервалом.
В общем-то всё работает, но висит, когда мышь перемещается по сцене. как это пофиксить?

Код AS3:
import flash.utils.setInterval;
stage.addEventListener(MouseEvent.MOUSE_MOVE,аnimating);
 
function аnimating(e:MouseEvent):void {
	clearInterval(intervalId)
	if(stage.mouseX<stage.width/2){ intervalId= setInterval (goNext,speed);}
	else{intervalId = setInterval(goPrev,speed);}		
	// Update after event to ensure no lag
	e.updateAfterEvent();
}
 
function goNext():void{
	 if (foranim.currentFrame < foranim.totalFrames)
       foranim.gotoAndStop(foranim.currentFrame + 1);
    else
        foranim.gotoAndStop(1);
		trace("going left "+foranim.currentFrame)}
 
function goPrev():void{
	 if (foranim.currentFrame >1)
       foranim.gotoAndStop(foranim.currentFrame - 1);
    else
        foranim.gotoAndStop(foranim.totalFrames);
		trace("going right "+foranim.currentFrame)}
var intervalId:uint	
var speed:int=50;


Последний раз редактировалось Маруська; 04.11.2014 в 13:55.
Старый 04.11.2014, 15:33
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ну, сейчас у Вас интервалы просто не успевают сработать, как уже отменяются (при движении мыши).
Попробуйте использовать Timer, меняя его delay без перезапуска.
__________________
Reality.getBounds(this);

Старый 04.11.2014, 15:54
Vreden вне форума Посмотреть профиль Отправить личное сообщение для Vreden Найти все сообщения от Vreden
  № 3  
Ответить с цитированием
Vreden
 
Аватар для Vreden

Регистрация: Feb 2009
Сообщений: 141
Добавьте условие в функцию animating, которое проверяет, изменилось ли направление и только тогда отменяйте setInterval и запускайте новый

Старый 05.11.2014, 11:11
Маруська вне форума Посмотреть профиль Отправить личное сообщение для Маруська Найти все сообщения от Маруська
  № 4  
Ответить с цитированием
Маруська

Регистрация: Feb 2012
Сообщений: 205
Код AS3:
import flash.utils.setInterval;
import flash.utils.Timer;
import flash.events.TimerEvent;
stage.addEventListener(MouseEvent.MOUSE_MOVE,аnimating);
var delay:int=0;
var t:Timer = new Timer(delay);
t.addEventListener(TimerEvent.TIMER, selectSide)
 
 
function аnimating(e:MouseEvent):void {
	t.stop()
	t.delay=200-Math.round(150/(Math.round(stage.width/2)/Math.round(Math.abs(stage.mouseX-stage.width/2))));
	t.start()
	e.updateAfterEvent();
}
function selectSide(event:TimerEvent):void {
if(stage.mouseX<stage.width/2){ goNext()}
	else goPrev();}		
	// Update after event to ensure no lag
 
function goNext():void{
	trace('goNext '+ t.delay)
	 if (foranim.currentFrame < foranim.totalFrames)
       foranim.gotoAndStop(foranim.currentFrame + 1);
    else
        foranim.gotoAndStop(1);}
 
function goPrev():void{
	trace('goPrev '+t.delay)
	 if (foranim.currentFrame >1)
       foranim.gotoAndStop(foranim.currentFrame - 1);
    else
        foranim.gotoAndStop(foranim.totalFrames);}
с таймером тоже тормозит

Добавлено через 2 часа 15 минут
отказалась от mouseEvent - работает отлично - спасибо всем!


Последний раз редактировалось Маруська; 05.11.2014 в 12:04.
Старый 05.11.2014, 14:17
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
var w:Number = stage.stageWidth/2;
var delay:int=0;
var lastTime:uint = (new Date).time;
stage.addEventListener(Event.ENTER_FRAME, аnimating);
 
function аnimating(e:Event):void 
{
	delay = w - Math.round(Math.abs(stage.mouseX - w));
	var m:uint = (new Date).time;
	if ((m - lastTime) >= delay)
	{
		lastTime = m;
		go();
	}
}
 
function go():void 
{
	if(stage.mouseX < w)
	{ 
		if (foranim.currentFrame < foranim.totalFrames)
       		foranim.gotoAndStop(foranim.currentFrame + 1);
    	else
        	foranim.gotoAndStop(1);
	}
	else 
	{
		if (foranim.currentFrame >1)
       		foranim.gotoAndStop(foranim.currentFrame - 1);
    	else
        	foranim.gotoAndStop(foranim.totalFrames);
	}	
}
__________________
Reality.getBounds(this);

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

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

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


 


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


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