Я создаю видеоплеер, используя Flash CS4 (далее «Flash») для создания графических символов, компиляции и отладки с помощью Flash Builder 4 («FB4»). Вот шаги, которые я предпринимаю в своем текущем рабочем процессе:
- Создание графических символов во Flash. Я создал несколько разных символов для игрока, но здесь я остановлюсь только на кнопке воспроизведения / паузы («ppbutton»).
- На панели «Библиотека» я перехожу к свойствам Linkage символа ppbutton и связываюсь с классом с именем assets.PlayPauseButtonAsset, который расширяет MovieClip. На самом деле у меня нет пакета ресурсов и файла класса для PlayPauseButtonAsset, поскольку Flash создаст их для меня при публикации.
- В настройках публикации Flash я установил для проекта экспорт файла SWC, который будет использоваться в FB4, под названием VideoPlayerAssets.swc.
- После создания SWC я создаю свой проект FB4 под названием «VideoPlayer» и добавляю SWC в свой путь. FB4 автоматически создает класс VideoPlayer в пакете по умолчанию.
- В VideoPlayer.as я импортирую assets. *, Который импортирует все классы символов, которые я создал во Flash, и которые доступны через VideoPlayerAssets.swc. Теперь я могу создать экземпляр кнопки ppbutton и добавить его на сцену, например:
var ppbutton:PlayPauseButtonAsset = new PlayPauseButtonAsset();
addChild(ppbutton);
На данный момент ppbutton не имеет никаких функций, потому что я не создавал для него никакого кода. Поэтому я создаю новый класс с именем video.controls.PlayPauseButtonLogic, который расширяет assets.PlayPauseButtonAsset. Я добавляю логику, и теперь я могу использовать этот новый класс для размещения рабочей кнопки ppbutton на сцене:
var ppbutton:PlayPauseButtonLogic = new PlayPauseButtonLogic();
addChild(ppbutton);
Это нормально работает, но вы можете спросить, почему я просто не связал символ ppbutton во Flash с классом video.controls.PlayPauseButtonLogic в первую очередь. Причина в том, что у меня есть дизайнер, создающий пользовательский интерфейс во Flash, и я не хочу, чтобы мне приходилось повторно публиковать SWC из Flash каждый раз, когда я вношу изменения в логику. По сути, я хочу, чтобы мой дизайнер мог создать символ во Flash, связать этот символ с классом с логическим именем в свойствах Linkage и экспортировать SWC. Я не хочу снова прикасаться к этому файлу .fla, если дизайнер не внесет изменения в символы или макет. Я также использую систему управления версиями для проекта, и будет проще убедиться, что только дизайнер касается файла .fla.
Итак, наконец, вот проблема, с которой я сталкиваюсь:
- По мере усложнения дизайна дизайнер вкладывает символы, чтобы расположить элементы управления видео на панели управления. Он создает символ панели управления и связывает его с assets.ControlBarAsset. Символ панели управления содержит символ кнопки ppbutton.
- Дизайнер публикует SWC, и ControlBarAsset теперь доступен в FB4. Я создаю новый класс с именем video.controls.ControlBarLogic, который расширяет assets.ControlBarAsset, чтобы я мог добавить некоторую логику на панель управления, и добавляю панель управления на сцену:
var controlbar:ControlBarLogic = new ControlBarLogic();
addChild(controlbar);
--Это работает, но кнопка pp ничего не делает. Это потому, что ppbutton, находясь внутри панели управления, по-прежнему связан только с PlayPauseButtonAsset, что не имеет никакой логики. Я больше не создаю экземпляр объекта ppbutton, потому что он является частью панели управления.
Вот где я застрял сегодня. Кажется, я не могу просто повторно преобразовать ppbutton панели управления как PlayPauseButtonLogic, поскольку я получаю ошибку типа. И я не хочу создавать класс, который должен создавать экземпляры каждого из элементов управления видеопроигрывателем, размещать их на их значениях x и y на сцене в соответствии с тем, как их разместил дизайнер, поскольку для этого мне потребуется открыть .fla и проверьте различные свойства символа, затем добавьте эти значения в код. Если бы дизайнер внес изменения, мне пришлось бы каждый раз входить в код, чтобы каждый раз обновлять эти свойства. Фигово.
Как мне преобразовать вложенные символы, чтобы использовать созданные мной классы логики, расширяющие классы активов? Помните, что решение состоит не в том, чтобы связывать символы Flash с реальными классами, поэтому мне не нужно постоянно перекомпилировать SWC, если нет способа сделать это без повторной компиляции SWC. Я хочу, чтобы дизайнер сделал свое дело, опубликовал SWC и покончил с этим. Затем я могу взять его SWC, применить свою логику к его ресурсам и иметь возможность отлаживать и компилировать окончательный SWF.