Встроенный ActionScript в SWF

#php #ruby #actionscript-3 #flash

#php #ruby #actionscript-3 #flash

Вопрос:

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

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

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

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

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

Ответ №1:

Вероятно, это не тот способ, которым вы хотите это сделать, но я попробую, потому что это аккуратный способ встраивания SWF-файла в другой SWF-файл ByteArray . Вы получите доступ к временной шкале и функции adframescript, которая позволяет добавлять функцию обратного вызова к фрейму в 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;
        }


    }
}
  

Комментарии:

1. Спасибо за это, похоже, это может решить мою проблему. Однако я не уверен, как это реализовать (Flash и AS далеки от моей сильной стороны). Я хорошо понимаю код, можете ли вы объяснить шаги, чтобы заставить это вывести конечный файл?

2. Вам нужен компилятор, который может создать SWF-файл для вас. Я использую Flash Builder, но есть много других (даже бесплатных) альтернатив.

3. У меня есть Adobe Flash CS5.5, возможно ли это сделать с помощью этого?

4. Конечно. Создайте enoty FLA и задайте класс document в моем примере.

5. Спасибо, я думаю, что я добираюсь туда 🙂 У меня есть компиляция кода, но он не загружает файл для встраивания, просматривая исходный код, я не понимаю, куда он загружает файл. Я вижу, где вы указываете, какой файл загружать, но не там, где он загружает файл. Большое спасибо, что помогли мне с этим!

Ответ №2:

Закрытие старого потока.

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