【问题标题】:Embedded ActionScript in SWFSWF 中的嵌入式 ActionScript
【发布时间】:2012-09-23 11:02:54
【问题描述】:

我有来自全国大约 50 位平面设计师的 .swf 文件,其中大多数人创建了幻灯片或视频,然后将其转换为 .swf 文件。

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

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

我的想法是创建一个简单的网络应用程序来为他们执行此操作,我的问题是我对 .swf 格式的了解不够(或者到目前为止还无法在网上找到正确的信息)如何这样做。

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

【问题讨论】:

    标签: php ruby actionscript-3 flash


    【解决方案1】:

    这可能不是您想要的方式,但我会试一试,因为它是使用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;
            }
    
    
        }
    }
    

    【讨论】:

    • 谢谢你,看来它可以解决我的问题。但是我不确定如何实现它(Flash 和 AS 远非我的强项)。我理解代码很好,你能解释一下让这个输出最终文件的步骤吗?
    • 您需要一个可以为您构建 SWF 文件的编译器。我使用 Flash Builder,但还有很多其他(甚至是免费的)替代品。
    • 我有一个 Adob​​e Flash CS5.5,可以用这个做吗?
    • 当然。在我的示例中创建一个 enoty FLA 并设置文档类。
    • 谢谢,我想我到了:) 我已经编译了代码,但它没有加载要嵌入的文件,查看源代码我不明白它加载文件的位置。我可以看到您声明要加载哪个文件的位置,但看不到它加载文件的位置。非常感谢你帮我解决这个问题!
    【解决方案2】:

    关闭旧线程。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      相关资源
      最近更新 更多