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

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

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

Регистрация: Jun 2006
Сообщений: 85
Question Помогите разобраться: загрузка и проигрыш мувиков через случайные промежутки времени

Люди добрые, помогите кто чем может. Третий день честно бьюсь — никак не осилю задачу. Сначала опишу что мне нужно.

Есть 4 внешних простых однотипных мувика длиной по 25(неважно) кадров каждый - tree1.swf...tree4.swf
Мне нужно выбирать случайным образом только один из них, загрузить его на сцену, проиграть до конца и выгрузить. После этого через случайный промежуток времени (в интервале примерно 1—5 сек) операция повторяется — выбираем случайно один мувик, грузим, играем, выгружаем — и так до бесконечности.
При этом есть еще кнопка, при наведении на которую приостанавливается воспроизведение загруженного мува. Убрали курсор — мув играет дальше до конца и т.д. Надеюсь, понятно изложил.

Поиском по форуму нашел кучу похожих примеров, но все они как-то вокруг да около, вобщем прикрутить под свои нужды так и не удалось

Итак, что имеем (код оставил только тот, что более-менее работает, остальное вычистил.)

В каждом из внешних мувов в последнем кадре прописал:
Код:
this.removeMovieClip();
чтобы клип сам выгружался по достижении конца — вроде работает.

Код:
//функция генерации случайных чисел — пример из хелпа
_global.randRange = function(min:Number, max:Number):Number  {
	var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min;
	return randomNum;
};

//собственно, основная функция
showTreez = function () {
	//генерим случ. номер от 1 до 4
	ti = _global.randRange(1, 4);
	
	//Здесь несущественно — предварительные вычисления всяких координат-размеров
	d = _global.randRange(-1, 1);
	if (d>=0) {
		di = 1;
	} else {
		di = -1;
	}
	//временно принудительно грузим только 4-й мув, для простоты
	ti = 4;
	
	//грузим собственно мув и он начинает играть
	this.createEmptyMovieClip("t_mc", 10);
	loadMovie("treez/tree"+ti+".swf", t_mc);
	t_mc._x = 360;
	t_mc._y = 158.7;
	t_mc._xscale = di*100;
};


//--------------Main code-------------------

//здесь для простоты пока взят постоянный интервал, хотя нужен случайный
setInterval(this, "showTreez", 3000);


//ну, и кнопка

bt.onRollOver = function() {
	t_mc.stop();
};

bt.onRollOut = function() {
	t_mc.play();
};
Собственно, вся фигня начинается сразу — после запуска функция живет своей жизнью, а мувики своей. Это я уже понял. Т.е. функция себе крутится внутри, грузит клипы и усе. В принципе, 2-3 секунд пока хватает, чтобы мувы грузились как бы по одному и проигрывались целиком. Если время в сетИнтервале уменьшить до 0,5-1 секунды, то видно, что клипы не доигрываются, а перегружаются новым экземпляром. И кнопка, естественно, работает не так, как надо — если навести мышь и подержать подольше, то видно что приостанавливается только загруженный на момент наведения мыши экземпляр, но функция продолжает крутиться, и через время перегружает его уже новым.

Также ни к чему не привела попытка подставить в сетИнетрвале что-то вроде
Код:
rndTime = _global.randRange(1, 3);
setInterval(this, "showTreez", rndTime);
Еще во внешних мувах прописал на всяк случай
Код:
в первом кадре _global.flag=false;
в последнем _global.flag = true;
но отловить его у меня тоже не получилось
Вобщем, совсем уже крыша едет. Подскажите, пожалуйста, что сделать, чтобы "со всей этой фигней взлететь?"
На всяк случай вот исходник с одним внешним мувом.
randomtreez.ZIP

зы Обещаю, если все получится как надо - выложить тут ссылу на сайт, где эта красота будет крутиться

Старый 05.05.2008, 08:01
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Основная флешка, первый кадр
Код:
function init ():Void {
	setInterval (this, "load", случайное время);
}
function load ():Void {
	тут грузим случайный клип
}
init ();
Последний кадр каждой подгружаемой флешки
Код:
this._parent.init ();
this.removeMovieClip()
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Jun 2006
Сообщений: 85
О, спасибо, попробую
А когда и где генерить случайное время?

upd Вобщем, попробовал так:

Код:
_global.randRange = function(min:Number, max:Number):Number  {
	var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min;
	return randomNum;
};


function init ():Void {
	setInterval (this, "load", 5000);
}


function load ():Void {
	ti = _global.randRange(1, 4);
	d = _global.randRange(-1, 1);
	if (d>=0) {
		di = 1;
	} else {
		di = -1;
	}

	this.createEmptyMovieClip("t_mc", 10);
	loadMovie("treez/tree"+ti+".swf", t_mc);
	t_mc._x = 360;
	t_mc._y = 158.7;
	t_mc._xscale = di*100;
};




init();

bt.onRollOver = function() {
	t_mc.stop();
};

bt.onRollOut = function() {
	t_mc.play();
};
и так

Код:
function init ():Void {
	rndTime = _global.randRange(2, 5);
	setInterval (this, "load", rndTime*1000);
}
зрительно ничего не изменилось. По-прежнему, кто-то — то-ли лоад() то-ли инит() грузит сама по себе клипы, а те сами по себе играют и выгружаются. И кнопка также стопорит только первый загруженный на момент роловера Сдается где-то чего-то еще не хватает


Последний раз редактировалось drobinkin; 05.05.2008 в 08:55.
Старый 05.05.2008, 09:00
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Был уверен, что писал setTimeout, а не setInterval. Ну ладно...
Поменяйте их.
setTimeout - вызывается метод один раз
setInterval - до тех пор, пока не остановить.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 05.05.2008, 09:27
drobinkin вне форума Посмотреть профиль Отправить личное сообщение для drobinkin Найти все сообщения от drobinkin
  № 5  
Ответить с цитированием
drobinkin
 
Аватар для drobinkin

Регистрация: Jun 2006
Сообщений: 85
Взял на себя смелость
Код:
function init ():Void {
	rndTime = _global.randRange(2, 5);
	_global.a=setInterval (this, "load", rndTime*1000);
}
а в последнем кадре клипа добавил

Код:
clearInterval(_global.a);
_parent.init ();
this.removeMovieClip();
Убрал this - это правильно?

Что я могу сказать — ура, клипы грузятся и работают как надо Спасибо большое
Кнопка вроде тоже заработала как надо


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

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

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


 


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


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