Встроенный ActionScript в SWF - PullRequest
2 голосов
/ 19 октября 2011

У меня есть файлы .swf от 50 графических дизайнеров со всей страны, большинство из которых создали слайд-шоу или видео, а затем преобразовали их в файл .swf.

Затем я отправляю эти файлы другой компании, которая обслуживает их через проприетарную часть программного обеспечения, которая ищет FSCommand (ActionScript 3) для обозначения конца видео.

Я хочу создать что-то простое, чтобы я мог импортировать эти файлы .swf, которые они получают от своих дизайнеров, которые будут добавлять FSCommand в последний кадр видео, а затем снова реэкспортировать файл как .swf, как я часто делаю. нет исходного файла .fla для работы.

Моя идея состояла в том, чтобы создать простое веб-приложение, которое будет делать это для них, моя проблема в том, что я недостаточно знаю о формате .swf (или пока не смог найти нужную информацию в Интернете) о том, как сделать это.

Надеясь, что кто-то здесь знает, как сделать вышеупомянутое в PHP или Ruby, если уже есть приложение, которое может сделать это, или если у вас есть лучшее представление о том, как выполнить эту задачу. Я не прошу, чтобы кто-то что-то написал для меня, просто толчок в правильном направлении был бы полезен.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2012

Закрытие старой темы.

Для других я не смог решить это. В итоге мы связались с дизайнерами и попросили их добавить команду в конце.

0 голосов
/ 19 октября 2011

Вероятно, это не тот способ, которым вы хотите это сделать, но я сделаю это, потому что это удобный способ встраивания SWF в другой SWF с использованием ByteArray.Вы получите доступ к временной шкале и функции addFrameScript, которая позволяет добавлять функцию обратного вызова для кадра в SWF.Когда вы компилируете свой новый SWF-файл, он встроит исходный SWF-файл и добавит скрипт в последний фрейм, вызывающий функцию lastFrameHandler.

Важная часть такова:

_animation.addFrameScript(_animation.totalFrames - 1, lastFrameHandler);

>

package
{
    import flash.display.Loader;
    import flash.display.MovieClip;
    import flash.events.Event;

    import mx.core.ByteArrayAsset;

    [SWF( frameRate="30", backgroundColor="#FFFFFF", width="500", height="500" )]   
    public class TestDecorator extends MovieClip
    {

        [Embed(source = 'bin-debug/animation.swf', mimeType="application/octet-stream")]
        public static const EmbeddedAnimation : Class;

        private var _loader : Loader;
        private var _asset : ByteArrayAsset;
        private var _animation : MovieClip;

        public function TestDecorator()
        {
            super();

            // create asset
            _asset = new EmbeddedAnimation();

            // load bytes
            _loader = new Loader();
            _loader.contentLoaderInfo.addEventListener(Event.INIT, onLoadCompleteHandler);
            _loader.loadBytes(_asset);
        }

        private function onLoadCompleteHandler(event : Event) : void
        {
            // remove listener
            _loader.contentLoaderInfo.removeEventListener(Event.INIT, onLoadCompleteHandler);

            // create asset as MovieClip
            _animation = MovieClip(_loader.content);

            // add a script that executes on the last frame
            _animation.addFrameScript(_animation.totalFrames - 1, lastFrameHandler)

            // add to displaylist
            addChild(_animation);
        }

        private function lastFrameHandler() : void
        {
            // add your fscommand here 
            // fscommand(*)

        }

        override public function play() : void
        {
            _animation.play();
        }

        override public function stop() : void
        {
            _animation.stop();
        }

        override public function get totalFrames() : int
        {
            return _animation.totalFrames;
        }

        override public function get currentFrame() : int
        {
            return _animation.currentFrame;
        }


    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...