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

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

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

Регистрация: Aug 2007
Сообщений: 13
По умолчанию Управление воспроизведением ролика

Здравствуйте!

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

И ещё - есть ли какое-то свойство у клипа, которое указывает, будет ли он проигрываться один раз или по кругу?

Спасибо!!!

Старый 10.08.2007, 16:40
7DimaN7 вне форума Посмотреть профиль Отправить личное сообщение для 7DimaN7 Найти все сообщения от 7DimaN7
  № 2  
Ответить с цитированием
7DimaN7
 
Аватар для 7DimaN7

Регистрация: Aug 2007
Сообщений: 15
Если я тебя правильно понял, то вот.
Создаешь три кнопки.Одной пишешь:
Код:
on(press){
MyMovieClip.play();
}
Это будет кнопка проигрывания.
Вторая кнопка остановки:
Код:
on(press){
MyMovieClip.stop();
}
Третья кнопка.Просмотр заново:
Код:
on(press){
MyMovieClip.gotoAndStop(1);
}

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

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
inils давал недавно этот код, за что ему большое спасибо!
Код:
mc1.onEnterFrame = function () {
	//trace ("K")
};
_global.control = new Object ();
AsBroadcaster.initialize (control);
MovieClip.prototype.doInit = function () {
//	trace ("init")
	control.addListener (this);
	delete this.onEnterFrame;
};
MovieClip.prototype.onEnterFrame = function () {
	this.doInit ();
};

mc.onRelease = function () {
	if (!mc.check) {
		trace (control._listeners.length)
		control.broadcastMessage ("stop");
	} else {
		control.broadcastMessage ("play");
	}
	mc.check = !mc.check;
};
__________________
Flash Developer
Папа TDP4 Team Battle

Старый 12.08.2007, 23:24
altyr вне форума Посмотреть профиль Отправить личное сообщение для altyr Найти все сообщения от altyr
  № 4  
Ответить с цитированием
altyr

Регистрация: Aug 2007
Сообщений: 13
Спасибо большое за советы, но у меня вопрос в том, что stop(), насколько я понимаю, действует только на главную сцену, а не на вложенные клипы. Поэтому если сделать stop() сцене, то вложенные клипы будут продолжать играть, пока им не сделать stop() явно. Орган управления хотелось бы сделать универсальным - для этого надо, я так понимаю, перебрать все клипы суцены и те что играют в настоящий момент запомнить и сделать им stop() (ну, соответственно, проделать это всё рекурсивно) - потом запомненным клипам сделать play(). Перебрать клипы я там понимаю не проблема - я не знаю, как проверить, играют ли они в настоящий момент или остановлены.

Ещё я не знаю насчёт управления зацикливанием, может подскажете...

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вы не поняли. Код выше (от магистра iNils'a) при нажатии на клип mc останавливает или запускает (в зависимости от своей же последней команды) ВСЕ клипы, и _рут, и вложенные.
Я немного переписал здесь, чтобы Вам было легче протестировать - создайте три-четыре клипа с простенькой анимацией (это могут быть экземпляры одного символа), поставте их на сцену и дайте имена какие хотите, но один назовите mc - это будет управляющая кнопка. При нажатии на нее клипы будут останавливаться - запускаться. Этот код поместите в первый кадр рута. В трейсе Вы увидите имена клипов, попавших под управление. И рут тоже будет там.
Код:
_root._name = 'Root'
_global.control = new Object ();
AsBroadcaster.initialize (control);
MovieClip.prototype.doInit = function () {
	trace ("init  "+this._name);
	control.addListener (this);
	delete this.onEnterFrame;
};
MovieClip.prototype.onEnterFrame = function () {
	this.doInit ();
};

mc.onRelease = function () {
	if (!mc.check) {
		trace (control._listeners.length)
		control.broadcastMessage ("stop");
	} else {
		control.broadcastMessage ("play");
	}
	mc.check = !mc.check;
};
__________________
Reality.getBounds(this);

Старый 19.08.2007, 19:44
altyr вне форума Посмотреть профиль Отправить личное сообщение для altyr Найти все сообщения от altyr
  № 6  
Ответить с цитированием
altyr

Регистрация: Aug 2007
Сообщений: 13
Спасибо за код попробовал, всё работает.

Проблема в том, что запуск / останов производится ВСЕХ вложенных клипов, а не только тех, которые проигрывались в момент нажатия кнопки.

Поясню на примере:
В первый кадр помещается клип, там же ему делается stop(). В 100 кадре этому клипу делается play(). В промежутке между 1 и 100 кадрами (например, в 50 кадре) пользователь нажимает заветную кнопку 2 раза - соответственно клип, который должен был запуститься только в 100 кадре, запускается много раньше. А это не есть хорошо.

Вопрос: как отследить у объекта movieclip, играет ли он или остановлен?

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

Спасибо за помощь

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

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

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Если задержка на пару кадров Вас не пугает, можно спросить два раза currentframe и сравнить. Вот рабочий код
Код:
var ListArray:Array
_global.control = new Object ();
AsBroadcaster.initialize (control);
_global.listing = new Object ();
AsBroadcaster.initialize (listing);
MovieClip.prototype.doInit = function () {
	listing.addListener(this);
	delete this.onEnterFrame
};
MovieClip.prototype.onEnterFrame = function () {
	this.doInit ();
};
mc.check = 0
mc.onRelease = function () {
	if (!mc.check) {
		FindPlayed();
		} else {
		control.broadcastMessage ("play");
		}
	mc.check = !mc.check;
};////////////////////////////////////////////////////////////////////////////////////
function FindPlayed(){
	rec = true;
	mc.onEnterFrame = function(){
	if(!rec){
		for(v=0; v<ListArray.length; v++){
			if(ListArray[v].cf != ListArray[v]._currentframe){// этот ролик играет!
				control.addListener (ListArray[v]);
			}
		}//trace('Записалось клипов: '+control._listeners.length);
		delete this.onEnterFrame
		control.broadcastMessage ("stop");
		};
	if(rec){ //trace('Всего клипов: '+listing._listeners.length);
		ListArray = listing._listeners;
		for(z=0; z<ListArray.length; z++){
			ListArray[z].cf = ListArray[z]._currentframe;
		}; 
		rec = false//запись сделана
		};
	};// end onEnterFrame
	
} // end Find Played
---------------
2 iNils : впереди на лихом коне Классно, я много узнал нового, возясь с твоим кодом. Только знаешь, delete this.onEnterFrame из прототипа похоже не работает
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 20.08.2007 в 00:19.
Старый 20.08.2007, 00:53
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 9  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Только знаешь, delete this.onEnterFrame из прототипа похоже не работает
В прототипе ничего не работает. Функция записанная в прототип наследуется экземпляром класса.

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

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

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

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

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


 


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


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