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

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

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

Регистрация: Feb 2008
Сообщений: 4
Доброго времени суток! возникла проблема при использовании данной функции. Моя задача - сделать плавное перемещение муви клипов (они есть на текущем кадре). Написал такую фукнцию:

Код:
function moveText(currentX, currentY, targetX, targetY, needSpeed, currentAlpha, targetAlpha, AlphaSpeed, count, targetcount, needMcName, intervalSpeed,timeDelay) {

var secondTimeInterval:Number;
var intervalId:Number;

    function zaderjka():Void {
	clearInterval(secondTimeInterval);

		
		function poexali():Void {
		count++;
		currentX += (targetX-currentX)/needSpeed;
		currentY += (targetY-currentY)/needSpeed;
		currentAlpha += (targetAlpha-currentAlpha)/AlphaSpeed;

		setProperty(needMcName, _x, currentX);
		setProperty(needMcName, _y, currentY);
		setProperty(needMcName, _alpha, currentAlpha);

		if (count>targetcount) {
			clearInterval(intervalId);
			count = 0;}
	    }
		
	    intervalId = setInterval(poexali, intervalSpeed);
		
	}
	secondTimeInterval = setInterval(zaderjka, timeDelay);	

};
Вызов этой фукнции:

Код:
moveText(mc._x, mc._y, 450, mc._y, 350, 0, 200, 700, 1, 1200, mc, 7,3000);
Все работает на ура, если вызывать ее один раз, если вызвать эту функцию еще раз
Код:
moveText(mc._x, mc._y, 450, mc._y, 350, 0, 200, 700, 1, 1200, mc, 7,3000);
moveText(sec._x, sec._y, 450, sec._y, 350, 0, 200, 700, 1, 1200, sec, 7,120000);
- движения первого мувика получаются дерганными.

Подскажите, как можно выйти из этой ситуации?

есть идея создавать каждый раз интервалы с другим именем, например добавляя к ним имя мувика, но идеи как это реализовать нет....

вот тут немного покопался в нете, нашел про циклическое создание переменных, что попытался реализовать в своей функции, вот что вышло:
Код:
var timeDelay:Number;
var secondTimeInterval:Number;
var intervalId:Number;

var count:Number;
var targetcount:Number = 1000;
var needMcName:MovieClip;
var targetX:Number;
var targetY:Number;
var currentX:Number;
var currentY:Number;
var needSpeed:Number;
var targetAlpha:Number;
var currentAlpha:Number;
var alphaSpeed:Number;
var intervalSpeed:Number = 7;
var kol:Number=2;


function moveText(currentX, currentY, targetX, targetY, needSpeed, currentAlpha, targetAlpha, AlphaSpeed, count, targetcount:Number, needMcName:MovieClip, intervalSpeed,timeDelay,kol:Number) {


    function zaderjka():Void {
	clearInterval(_root["secondTimeInterval"+_root.kol]);

		
		function poexali():Void {
		count++;
		currentX += (targetX-currentX)/needSpeed;
		currentY += (targetY-currentY)/needSpeed;
		currentAlpha += (targetAlpha-currentAlpha)/AlphaSpeed;
		setProperty(needMcName, _x, currentX);
		setProperty(needMcName, _y, currentY);
		setProperty(needMcName, _alpha, currentAlpha);

		if (count>targetcount) {
			clearInterval(_root["intervalId"+_root.kol]);
			count = 0;}
	    }
		
	    _root["intervalId"+_root.kol] = setInterval(poexali, intervalSpeed);
		
	}
	_root["secondTimeInterval"+_root.kol] = setInterval(zaderjka, timeDelay);	
	
	
trace(_root["secondTimeInterval"+_root.kol]);	
trace(_root["intervalId"+_root.kol]);
trace(_root.kol);

};


moveText(mc._x, mc._y, 450, mc._y, 350, 0, 200, 700, 1, 1200, mc, 7,500,1);
в trace выводит
Код:
1
undefined
2
kol пробовал и с _рутом и просто писать... результат такой же.. немного непонятно, почему в функцию не передается kol, хотя если другие параметры, такие как currentX, currentY, targetX, targetY, needSpeed и т.д. передаются нормально ? ....


Последний раз редактировалось iNils; 12.02.2008 в 18:45.
Старый 13.02.2008, 00:13
IYAKOV вне форума Посмотреть профиль Отправить личное сообщение для IYAKOV Найти все сообщения от IYAKOV
  № 2  
Ответить с цитированием
IYAKOV
 
Аватар для IYAKOV

Регистрация: Feb 2007
Адрес: RB
Сообщений: 87
Отправить сообщение для IYAKOV с помощью ICQ
хм.. а зачем нужно устанавливать интервал для одноразового вызова внутренней функции?

Старый 13.02.2008, 00:39
cardexc вне форума Посмотреть профиль Отправить личное сообщение для cardexc Найти все сообщения от cardexc
  № 3  
Ответить с цитированием
cardexc

Регистрация: Feb 2008
Сообщений: 4
Один интервал (secondTimeInterval) нужен для задержки перед выполнением функции, в которой второй интервал (intervalId) циклически гоняет мой мувик

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

Регистрация: Feb 2007
Адрес: RB
Сообщений: 87
Отправить сообщение для IYAKOV с помощью ICQ
зачем передавать столько параметров!
это уже ошибка. Не может быть такой фунцкии, в которую надо передавать более 4-5 параметров (иногда нужно ), тем более передавать внутренние переменные. Почему бы их не объявить внутри функций.

По первому коду:
при втором вызове скорее всего переменная интервала перезатирается и первый интервал не останавливается никогда.

про второй:
И если вы уже стали передавать столько переменных, то зачем их было нужно передавать, чтобы потом обращатся к ним через корень! 8( (это я про рут.кол)

Старый 13.02.2008, 17:05
cardexc вне форума Посмотреть профиль Отправить личное сообщение для cardexc Найти все сообщения от cardexc
  № 5  
Ответить с цитированием
cardexc

Регистрация: Feb 2008
Сообщений: 4
Да, параметров конечно в самом деле много но т.к. как они все нужны вижу только один способ - сделать какую-нить подфункцию ...

По первому коду - да, она то останавливается, но работает не так как нужно... с дерганием, как-будто перекрывается

А про рут, это уже были отчаянные действия.... так как функция в упор не видела эту переменную

Старый 13.02.2008, 22:53
Aisaid вне форума Посмотреть профиль Отправить личное сообщение для Aisaid Найти все сообщения от Aisaid
  № 6  
Ответить с цитированием
Aisaid
[+3 19.07.07]
 
Аватар для Aisaid

Регистрация: Aug 2006
Адрес: Kharkov, Ukraine
Сообщений: 129
Отправить сообщение для Aisaid с помощью ICQ
cardexc, почитайте здесь: http://blog.greensock.com/tweenliteas2

а с интервалами повнимательней - перед тем как вызвать его ещё раз, очищайте вызов предидущего с помощью клеарИнтервал...
__________________
Самый великий программер - БОГ!

Старый 14.02.2008, 15:19
cardexc вне форума Посмотреть профиль Отправить личное сообщение для cardexc Найти все сообщения от cardexc
  № 7  
Ответить с цитированием
cardexc

Регистрация: Feb 2008
Сообщений: 4
Aisaid

да, будем внимательней

а за ссылку спасибо, почитаю

Старый 15.02.2008, 12:53
Dzhav вне форума Посмотреть профиль Отправить личное сообщение для Dzhav Найти все сообщения от Dzhav
  № 8  
Ответить с цитированием
Dzhav
 
Аватар для Dzhav

Регистрация: Jan 2008
Сообщений: 35
Цитата:
Один интервал (secondTimeInterval) нужен для задержки перед выполнением функции
Для этого лучше используй setTimeout()
__________________
qubstudio.com

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

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

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


 


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


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