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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 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.
Старый 19.05.2009, 12:13
Wlspartak вне форума Посмотреть профиль Отправить личное сообщение для Wlspartak Найти все сообщения от Wlspartak
  № 2  
Ответить с цитированием
Wlspartak

Регистрация: Apr 2009
Сообщений: 74
Может iLevel постоянно растет и не обнуляется?

Старый 19.05.2009, 14:04
ОльгаЮрьевна вне форума Посмотреть профиль Отправить личное сообщение для ОльгаЮрьевна Посетить домашнюю страницу ОльгаЮрьевна Найти все сообщения от ОльгаЮрьевна
  № 3  
Ответить с цитированием
ОльгаЮрьевна
 
Аватар для ОльгаЮрьевна

Регистрация: Mar 2008
Адрес: Санкт-Петербург
Сообщений: 171
Отправить сообщение для ОльгаЮрьевна с помощью ICQ
МихаилК, а что значит - аттачатся надписи из библиотеки?... они в каком виде там лежат?... у меня была подобная проблема с размножение мувиков - я в мувике в последнем кадре прописала - this.removeMovieClip(); может эта информация вам чем-то поможет

Старый 19.05.2009, 16:01
МихаилК вне форума Посмотреть профиль Отправить личное сообщение для МихаилК Найти все сообщения от МихаилК
  № 4  
Ответить с цитированием
МихаилК
 
Аватар для МихаилК

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

Код AS1/AS2:
//загрузка изображений надписей в количестве countLables (прототипы загружаются по кругу)
for (var i=0;i<countLables;i++) {
	var labelName = "label"+i;
	_root.createEmptyMovieClip(labelName, i);
	_root[labelName]._alpha = 0;
	var labelNamePrototip = "label"+iPrototip;
	iPrototip++;
	if (iPrototip>maxPrototip) iPrototip=0;
	_root[labelName].attachMovie(labelNamePrototip, labelName, labelLevel);	
}
в ролике сейчас countLables равно 20, а maxPrototip равно 5, т.е., у меня перед началом ротации создается 20 мувиков с именами "label0", "label1", ... "label19", в которые положены 5 прототипов из библиотеки. Это я сделал, чтобы больше не лазить в библиотеку, хотя выигрыша в производительности мне это не дало.

Каждый прототип в библиотеке - это шрифтовая надпись, переведенная в кривые (ctrl-D дважды) и сконвертированная в символ.

Старый 19.05.2009, 16:05
ОльгаЮрьевна вне форума Посмотреть профиль Отправить личное сообщение для ОльгаЮрьевна Посетить домашнюю страницу ОльгаЮрьевна Найти все сообщения от ОльгаЮрьевна
  № 5  
Ответить с цитированием
ОльгаЮрьевна
 
Аватар для ОльгаЮрьевна

Регистрация: Mar 2008
Адрес: Санкт-Петербург
Сообщений: 171
Отправить сообщение для ОльгаЮрьевна с помощью ICQ
МихаилК если у вас прототипы это мувики - сделайте как я сказала и проблем не будет... просто когда все это богатство грузится setInterval мозги у компьютера реально ломаются...

Старый 19.05.2009, 16:15
МихаилК вне форума Посмотреть профиль Отправить личное сообщение для МихаилК Найти все сообщения от МихаилК
  № 6  
Ответить с цитированием
МихаилК
 
Аватар для МихаилК

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

У меня есть подозрение, что дело действительно в сетИнтервале. Может поставить 24 кадра в секунду и в каждый четвертый кадр запихать вызов функции, которая запускает очередной мувик?

Старый 19.05.2009, 16:27
ОльгаЮрьевна вне форума Посмотреть профиль Отправить личное сообщение для ОльгаЮрьевна Посетить домашнюю страницу ОльгаЮрьевна Найти все сообщения от ОльгаЮрьевна
  № 7  
Ответить с цитированием
ОльгаЮрьевна
 
Аватар для ОльгаЮрьевна

Регистрация: Mar 2008
Адрес: Санкт-Петербург
Сообщений: 171
Отправить сообщение для ОльгаЮрьевна с помощью ICQ
... а почему все-таки не добавить в последний кадр каждого мувика this.removeMovieClip()?... если вам думается что это не корректно - зря! это хороший метод... а про 24 кадра в секунду... ну там-же и не в секунду вовсе... там какая-то мутная история - я к тому, что к ним лучше не сильно привязываться

Старый 19.05.2009, 16:27
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 8  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Функция в функции? Вообще не в курсе тонкостей работы, но здравый смысл подсказывает, что hideLabel() - локальная функция, короче она умрет после конца родительской функции.
iLevel - не определенно.
slideTo, alphaTo - реализации не видно.

UPD: проглядел ссылку)


Последний раз редактировалось Psycho Tiger; 19.05.2009 в 16:55.
Старый 19.05.2009, 23:06
МихаилК вне форума Посмотреть профиль Отправить личное сообщение для МихаилК Найти все сообщения от МихаилК
  № 9  
Ответить с цитированием
МихаилК
 
Аватар для МихаилК

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

> а почему все-таки не добавить в последний кадр каждого мувика this.removeMovieClip()?.

У меня так было сделано в самом первом варианте.
Каждый раз при вызове showOneLabel() создавался пустой клип, куда аттачился клип из библиотеки, в конце по событию окончания движения отрабатывался removeMovieClip (только не изнутри, а снаружи).

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

На самом деле, глюк с замиранием воспроизведения наблюдается только в ФФоксе (в частности, с десятым плеером от адобе). В ИЕ задержек нет.

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

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

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


 


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


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