SWF中嵌入的ActionScript

时间:2011-10-18 21:19:13

标签: php ruby actionscript-3 flash

我有来自全国各地约50位图形设计师的.swf文件,其中大部分都创建了幻灯片或视频,然后将其转换为.swf文件。

然后我将这些文件发送给另一家公司,该公司通过专有的软件为他们提供服务,该软件会查找FSCommand(ActionScript 3)来表示视频的结束。

我想创建一些简单的东西,我可以导入这些.swf文件,这些文件是他们从设计师处接收到的,这些文件会将FSCommand添加到视频的最后一帧,然后再次将文件重新导出为.swf,因为我经常穿没有源.fla文件可以使用。

我的想法是创建一个简单的网络应用程序,它将为他们这样做,我的问题是我不太了解.swf格式(或已经能够在线找到正确的信息)如何这样做。

希望有人知道如何在PHP或Ruby中执行上述操作,如果已有可以执行此操作的应用程序,或者您对如何完成此任务有更好的了解。我不是要求别人为我写任何东西,只要在正确的方向上推动就会有所帮助。

2 个答案:

答案 0 :(得分:0)

这可能不是你想要的方式,但我会试一试,因为这是一种使用ByteArray将SWF嵌入另一个SWF的巧妙方法。您将可以访问时间轴和函数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;
        }


    }
}

答案 1 :(得分:0)

关闭一个旧线程。

对于其他人,我无法解决这个问题。我们最终联系了设计师并让他们在最后添加命令。