![]() |
Управление воспроизведением ролика
Здравствуйте!
Я хочу сделать флешку, которая бы управляла воспроизведением основного ролика: запуск, останов, зацикливание. В связи с этим возникают вопросы: start и stop управляют только анимацией сцены, а не вложенных клипов - соответственно надо рекурсивно перебрать все клипы и их остановить или запустить. Но как узнать, клип в настоящий момент проигрывается или остановлен? И ещё - есть ли какое-то свойство у клипа, которое указывает, будет ли он проигрываться один раз или по кругу? Спасибо!!! |
Если я тебя правильно понял, то вот.
Создаешь три кнопки.Одной пишешь: Код:
on(press){Вторая кнопка остановки: Код:
on(press){Код:
on(press){ |
inils давал недавно этот код, за что ему большое спасибо!
Код:
mc1.onEnterFrame = function () { |
Спасибо большое за советы, но у меня вопрос в том, что stop(), насколько я понимаю, действует только на главную сцену, а не на вложенные клипы. Поэтому если сделать stop() сцене, то вложенные клипы будут продолжать играть, пока им не сделать stop() явно. Орган управления хотелось бы сделать универсальным - для этого надо, я так понимаю, перебрать все клипы суцены и те что играют в настоящий момент запомнить и сделать им stop() (ну, соответственно, проделать это всё рекурсивно) - потом запомненным клипам сделать play(). Перебрать клипы я там понимаю не проблема - я не знаю, как проверить, играют ли они в настоящий момент или остановлены.
Ещё я не знаю насчёт управления зацикливанием, может подскажете... |
Вы не поняли. Код выше (от магистра iNils'a) при нажатии на клип mc останавливает или запускает (в зависимости от своей же последней команды) ВСЕ клипы, и _рут, и вложенные.
Я немного переписал здесь, чтобы Вам было легче протестировать - создайте три-четыре клипа с простенькой анимацией (это могут быть экземпляры одного символа), поставте их на сцену и дайте имена какие хотите, но один назовите mc - это будет управляющая кнопка. При нажатии на нее клипы будут останавливаться - запускаться. Этот код поместите в первый кадр рута. В трейсе Вы увидите имена клипов, попавших под управление. И рут тоже будет там. Код:
_root._name = 'Root' |
Спасибо за код попробовал, всё работает.
Проблема в том, что запуск / останов производится ВСЕХ вложенных клипов, а не только тех, которые проигрывались в момент нажатия кнопки. Поясню на примере: В первый кадр помещается клип, там же ему делается stop(). В 100 кадре этому клипу делается play(). В промежутке между 1 и 100 кадрами (например, в 50 кадре) пользователь нажимает заветную кнопку 2 раза - соответственно клип, который должен был запуститься только в 100 кадре, запускается много раньше. А это не есть хорошо. Вопрос: как отследить у объекта movieclip, играет ли он или остановлен? Если это возможно - значит при первом нажатии кнопки надо перед остановкой запоминать все играющие клипы, чтобы при повторном нажатии запустить только их. Спасибо за помощь |
Запомнить текущий кадр для каждого клипа, подождать еще один кадр и сравнить с тем, что запомнили.
|
Если задержка на пару кадров Вас не пугает, можно спросить два раза currentframe и сравнить. Вот рабочий код
Код:
var ListArray:Array2 iNils : впереди на лихом коне :) Классно, я много узнал нового, возясь с твоим кодом. Только знаешь, delete this.onEnterFrame из прототипа похоже не работает :( |
Цитата:
|
блин опять началось... хоть вообще рот не открывай.
У меня на фирме я один дизайнер. И пять программистов (питон, С++ и т.д.) Все нормально понимают что я говорю. Здесь чё ни скажи, тут же кто-нибудь за слова цепляться начинает. Причем ведь нормально сказал - функция ИЗ прототипа, т.е. функция, прописанная в прототипе. Что не так??? |
Хорошо, в таком случае, донеси до меня смысл заложенный в этой стоке:
Цитата:
Цитата:
|
Цитата:
Код:
this.onEnterFrame = null; |
С вашего позволения вернусь к основной теме :)
Спасибо за советы, но как-то сложновато и неэлегантно. А нельзя реализовать такой вариант (извините если говорю что-то не то, просто я в AS пока не очень-то разбираюсь, а мыслю категориями сиплюсплюса): Отнаследоваться от movieclip'а и создавать все клипы на основе этого класса. У него определить свойство isStopped, соответственно добавить методы что-то типа: Код:
MyStopА вообще мне описанная задача кажется очень естественной, наверное каждый второй с ней сталкивается. Неужели нет стандартных решений? |
ОК, а как Вы будете определять значение isStopped?
--------------------------------------- 2 udaaf >>Хорошо, в таком случае, донеси до меня смысл Тебе объяснить почему я сказал "из прототипа" ? Потому что в коде есть другая onEnterFrame, и я [попытался] указать на ту, что в прототипе. Или объяснить, что я имею в виду под "не работает" Здесь я могу ошибаться, поэтому и выразился неуверенно - "похоже не работает". Я вообще-то предположил, что после того как клип выполнил doInit() один раз и записался в листенеры, больше он этого делать не должен (простите за отсутствие слэнга), так как удаляется обработчик события, в котором и записан вызов этой функции doInit(). На деле же все клипы на каждый свой "кадр" посылают крики о помощи. |
Цитата:
Не понял вопроса... |
Как Вы узнаете, играет клип или нет?
|
Цитата:
Код:
Или вариант Kikasso с this.onEnterFrame = null. Чтобы понять, почему этот работает, стоит прочитать http://www.flash-mx.ru/forum/topic_show.pl?tid=1819 |
Код:
Как Вы узнаете, играет клип или нет?Когда делаем ему MyStop - уже не играет (isStopped==true) Когда надо узнать - ифом ( if(someClip.isStopped ... ) ) Или я опять не понял вопроса? :rolleyes: А как клипам назначить, что они, мол, другого класса (производного)? |
Да ведь Вы же сами описали проблему - вовсе не все клипы по-умолчанию играют. Я бы даже сказал, что в обычном проекте, не мультфильме, большинство-то как раз изначально не играет, а запускается при определенных условиях. Клипы-кнопки просто наилучший пример. И если Вы все их запустите, получите невероятный хаос.
|
Цитата:
Хорошо, наследуем от movieclip'a - в этом классе объявляем злосчастное свойство isStopped :) Уже от этого класса наследуем ещё - для кнопок (в конструкторе по умолчанию остановлен), для клипов (соответственно, запущен). Не вижу проблемы или я чего-то не учёл? |
Я, признаться, одного не понимаю - про саму идею наследования в этом вашем проекте. Я изначально как-то думал, что Вы делаете типа флэш-плеерб и собираетесь играть в нем "чужие" свф-файлы. Потому что если Вы сами собираетесь создавать файлы, над которыми хотите получить контроль, то проблема вообще не понятна - создали, например, в специальном массиве список ссылок на клипы этого файла, которые надо запускать-останавливать + какие-то дополнительные параметры (типа клип с_а после 50 кадра рута больше не запускать)... Ну я не знаю, тут совсем другая история получается.
А если ролики чужие, то уж по-моему сама идея беспросветна. Безглючности не получится. Мало ли как автор загнул там анимацию и связи. Под раздачу может попасть клип, который и должен-то был проиграть один раз три кадра, но так получилось что в этот момент он записался. И вы его запустите. А в нем, быть может, скрипт, который аттачит из библиотеки пару сотен других клипиков... Как Вы собираетесь предусмотреть все эти ситуации? Да возьмите любой сайт с неотключенным меню по правой кнопке и сделайте пару шагов вперед. Всё рухнет, потому что нарушатся все связи. Да что я Вам такие очевидные вещи объясняю... Лучше сформулируйте подробней, чего Вы собственно хотите в конечном результате. |
| Часовой пояс GMT +4, время: 09:45. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.