![]() |
|
||||||||||
|
|||||
|
Регистрация: Aug 2007
Сообщений: 13
|
Здравствуйте!
Я хочу сделать флешку, которая бы управляла воспроизведением основного ролика: запуск, останов, зацикливание. В связи с этим возникают вопросы: start и stop управляют только анимацией сцены, а не вложенных клипов - соответственно надо рекурсивно перебрать все клипы и их остановить или запустить. Но как узнать, клип в настоящий момент проигрывается или остановлен? И ещё - есть ли какое-то свойство у клипа, которое указывает, будет ли он проигрываться один раз или по кругу? Спасибо!!! |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 15
|
Если я тебя правильно понял, то вот.
Создаешь три кнопки.Одной пишешь: Это будет кнопка проигрывания. Вторая кнопка остановки: Третья кнопка.Просмотр заново: |
|
|||||
|
Регистрация: 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;
};
|
|
|||||
|
Регистрация: Aug 2007
Сообщений: 13
|
Спасибо большое за советы, но у меня вопрос в том, что stop(), насколько я понимаю, действует только на главную сцену, а не на вложенные клипы. Поэтому если сделать stop() сцене, то вложенные клипы будут продолжать играть, пока им не сделать stop() явно. Орган управления хотелось бы сделать универсальным - для этого надо, я так понимаю, перебрать все клипы суцены и те что играют в настоящий момент запомнить и сделать им stop() (ну, соответственно, проделать это всё рекурсивно) - потом запомненным клипам сделать play(). Перебрать клипы я там понимаю не проблема - я не знаю, как проверить, играют ли они в настоящий момент или остановлены.
Ещё я не знаю насчёт управления зацикливанием, может подскажете... |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: 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); |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 13
|
Спасибо за код попробовал, всё работает.
Проблема в том, что запуск / останов производится ВСЕХ вложенных клипов, а не только тех, которые проигрывались в момент нажатия кнопки. Поясню на примере: В первый кадр помещается клип, там же ему делается stop(). В 100 кадре этому клипу делается play(). В промежутке между 1 и 100 кадрами (например, в 50 кадре) пользователь нажимает заветную кнопку 2 раза - соответственно клип, который должен был запуститься только в 100 кадре, запускается много раньше. А это не есть хорошо. Вопрос: как отследить у объекта movieclip, играет ли он или остановлен? Если это возможно - значит при первом нажатии кнопки надо перед остановкой запоминать все играющие клипы, чтобы при повторном нажатии запустить только их. Спасибо за помощь |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: 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. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Цитата:
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
блин опять началось... хоть вообще рот не открывай.
У меня на фирме я один дизайнер. И пять программистов (питон, С++ и т.д.) Все нормально понимают что я говорю. Здесь чё ни скажи, тут же кто-нибудь за слова цепляться начинает. Причем ведь нормально сказал - функция ИЗ прототипа, т.е. функция, прописанная в прототипе. Что не так???
__________________
Reality.getBounds(this); |
![]() |
![]() |
Часовой пояс GMT +4, время: 11:32. |
|
|
« Предыдущая тема | Следующая тема » |
|
|