Показать сообщение отдельно
Старый 18.05.2009, 23:29
МихаилК вне форума Посмотреть профиль Отправить личное сообщение для МихаилК Найти все сообщения от МихаилК
  № 1  
Ответить с цитированием
МихаилК
 
Аватар для МихаилК

Регистрация: Aug 2001
Адрес: Россия, С.-Петербург
Сообщений: 10
По умолчанию Помогите разобраться с подтормаживанием ролика

Ролик представляет из себя ротацию надписей, которые вылетают из центра ролика в случайных направлениях и на случайное расстояние, потом гаснут. Проблема в том, что ролик какое-то время работает гладко, потом замирает (останавливается движение всех надписей), потом все продолжается штатно. Из-за этих задержек все выглядит неаккуратненько. Особенно проявляется в FireFox с десятым плеером от Адобе.

Реализовал я все это на Movieclip tweening prototypes 1.2.0, ссылка на исходник: http://laco.wz.cz/tween

Код скрипта, который обеспечивает ротацию:

Код AS1/AS2:
#include "lmc_tween_as1.as"
 
// Показ одной надписи в движении
function showOneLabel(labelName,positionEndX,positionEndY) {
	// Ставим надпись на начальную позицию
	_root[labelName]._x = positionStartX;
	_root[labelName]._y = positionStartY;
	//перемещаем и проявляем, дойдя до половины, гасим с задержкой в четверть интервала (функция hideLabel)
	_root[labelName].slideTo(positionEndX, positionEndY, movingInterval, "linear");
	_root[labelName].alphaTo(100, movingInterval*0.5, "linear", 0, hideLabel);
	function hideLabel() {
		_root[labelName].alphaTo(00, movingInterval*0.25, "linear", movingInterval*0.25);
	}	
}
 
// Запуск показа оцередной надписи
function startLabelMoving() {
	//Вычисляем новую позицию надписи
	var positionEndX = baseX+random(movinX);
	var positionEndY = baseY+random(movinY);
	//Запускаем надпись
	labelName = "label"+iLevel;
	showOneLabel(labelName,positionEndX,positionEndY);
	//Вычисляем номер следующей надписи
	iLevel++;
	if (iLevel>countLables) iLevel=0;	
}
 
var interv=setInterval(startLabelMoving,rotationInterval);
Предварительно (эту часть кода я опускаю за очевидностью) создаются пустые мувиклипы и к ним аттачатся надписи из библиотеки - в итоге получается заданное количество мувиков _root["label0"],_root["label1"],_root["label2"]... которые по очереди запускаются из центра ролика. Параметры, которые требуются - запуск новой надписи каждые 150 миллисекунд, время жизни одной надписи - 2 сек (т.е., всего одновременно двигаются примерно 15 надписей).

Это, собственно, уже третий вариант. Во втором варианте я не задавал мувики заранее, в создавал непосредственно внутри функции showOneLabel (передавал туда дополнительно id прототипа, который надо аттачить). Тоже подтормаживало.

В первом варианте использовал класс Tween, идущий в поставке, но там нет возможности изменять два параметра сразу, поэтому взял этот класс. Впрочем, Tween тоже подтормаживал.

Нужен совет, как заставить все это двигаться гладко.


Последний раз редактировалось МихаилК; 18.05.2009 в 23:33.