Как добавить поведение кнопки в компонент кнопки видеоплеера? - PullRequest
0 голосов
/ 23 февраля 2011

Фон

Я пытаюсь создать простой «универсальный» медиаплеер с одинаковым пользовательским интерфейсом (или максимально похожим) для воспроизведения видео и аудио. К сожалению, FLVPlayback, по моему мнению, не в состоянии обрабатывать аудиофайлы, поэтому я использую Sound и SoundChannel.

Воспроизведение моего видео обрабатывается с использованием компонента FLVPlayback, который «при необходимости» подключается к стандартным элементам управления «на лету». Я хочу подключить их к Sound / SoundChannel при воспроизведении звука, чтобы в обоих случаях работали одни и те же виджеты пользовательского интерфейса. Я бы хотел избежать создания всех моих компонентов с нуля, потому что компонент FLVPlayback делает много полезных вещей "бесплатно", но это начинает выглядеть сложно.

Gorey Stuff

Стандартный PlayPauseButton - это MovieClip с двумя слоями, один из которых содержит кнопку Play (и с именем экземпляра play_mc) и кнопку Pause (pause_mc). Внутри одного из них есть фильм с таким кодом:

stop();
this.upLinkageID = "PauseButtonNormal";
this.overLinkageID = "PauseButtonOver";
this.downLinkageID = "PauseButtonDown";
this.disabledLinkageID = "PauseButtonDisabled";

Фильм имеет два кадра.

В первом кадре находится один фрагмент ролика с именем экземпляра placeholder_mc.

На втором кадре находятся экземпляры состояний кнопок, но у них нет имени экземпляра (что облегчит задачу). Однако они являются экземплярами библиотечного объекта с именем, указанным выше.

Что я хотел бы сделать, так это написать функцию, которая, когда передается одна из этих кнопок (скажем, pause_mc), автоматически добавляет к ней кнопочное поведение. В «документации» Adobe я не могу понять, как использовать информацию, встроенную в код фрагмента ролика, для замены содержимого placeholder_mc на то, что мне нужно.

ТЛ; др

По сути, мне просто нужно реализовать функцию set_instance, чтобы приведенный ниже код изменял видимое состояние кнопки, как и ожидалось:

var my_button:MovieClip = pause_mc;
my_button.addEventListener( MouseEvent.MOUSE_OVER, function( e:Event ){
  set_instance( my_button.placeholder_mc, my_button.overLinkageID );
} );

Ответы [ 2 ]

1 голос
/ 12 января 2013

Я пытался заставить это работать с использованием компонента PlayPauseButton сегодня. Похоже, что Adobe не делает открытыми нам те хуки, которые мы ищем: P.

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

Вы можете выкопать отдельные состояния кнопок из двух фрагментов ролика (воспроизведение и пауза), содержащихся в компоненте PlayPauseButton, присвоить им имена экземпляров, а затем использовать их для установки соответствующих свойств обложки кнопки с помощью setStyle() метод. Убедитесь, что вы также изменили размер кнопки до 23x23, чтобы избежать растяжения.

0 голосов
/ 24 февраля 2011

Обычно я просто делаю кнопку, а затем назначаю клипы или экранные объекты в качестве обложки, используя:

var myButton:Button = new Button();
myButton.setStyle('upSkin', new PlaySkin());
myButton.setStyle('selectedUpSkin', new PauseSkin());

Тогда все ваши состояния кнопок будут автоматически обрабатываться Flash. Для кнопки PlayPause вы можете установить для свойства «toggle» кнопки значение «true», а затем каждый раз, когда вы нажимаете на нее, кнопка переключается с выбранной обложки на верхнюю обложку и обратно.

...