【问题标题】:Flex 3 - Movie Clips - Viewing multiple frames on the stageFlex 3 - 电影剪辑 - 在舞台上查看多个帧
【发布时间】:2010-02-24 00:29:28
【问题描述】:

我想在舞台上同时查看 MovieClip 中的所有帧,但是我正在努力从 MovieClip 中提取单个帧信息。

我已成功将外部 SWF 加载到 MovieClip 并使用以下代码按顺序查看帧:

    <mx:HBox id="hbox"></mx:HBox>

<mx:Script>
    <![CDATA[
        import mx.controls.SWFLoader;

        public var loader:SWFLoader = new SWFLoader();
        public var myMovieClip:MovieClip = new MovieClip();

        public function init():void {
            loader.addEventListener(Event.COMPLETE, handleLoaded);
            loader.load('assets/test_document.swf');    
        }

        public function handleLoaded(e:Event):void {
            var myMovieClip:MovieClip = e.currentTarget.content as MovieClip;
            myMovieClip.stop();

            hbox.addChild(loader);
        }
    ]]>
</mx:Script>

查看屏幕上所有帧的最有效方法是什么?

提前致谢。

【问题讨论】:

    标签: apache-flex actionscript-3


    【解决方案1】:

    你是指同时所有的帧吗?喜欢:

    function getClipAsBitmaps(clip:MovieClip):ArrayCollection{
        var data:ArrayCollection = new ArrayCollection();
        var frames:int = clip.totalFrames;
        for(var i:int = 1 ; i <= frames;  i++){
            clip.gotoAndStop(i);
            trace(i);
            var bitmapData:BitmapData = new BitmapData(clip.width,clip.height,true,0x00FFFFFF);
            bitmapData.draw(clip);
            data.addItem({source:new Bitmap(bitmapData),label:'frame: ' + i});
        }
        return data;
    }
    
    tileList.dataProvider = getClipAsBitmaps(star);
    

    注意:MovieClip 变换被忽略

    【讨论】:

    • IIRC,这实际上行不通。您将获得剪辑第 1 帧的totalFrames 副本。 gotoAndStop 直到下一个 ENTER_FRAME 事件触发时才真正完成。
    • 在使用 DataProvider 而不是 ArrayCollection 和 10 帧长的动画发布之前,我在 flash 中进行了测试。我得到了每帧内容的 10 张图像(不是 frame1 的 10 个副本)。我不确定我明白你的意思
    【解决方案2】:

    最简单的方法是将 SWF clip.totalFrames 次、gotoAndStop 每个实例加载到不同的帧,然后以某种有意义的方式将它们全部添加到舞台。通常你的浏览器会在第一次加载后缓存 SWF,所以这并不像你想象的那么可怕。

    另一种解决方案是gotoAndStop 到每一帧,然后

    var bitmapData:BitmapData = new BitmapData(clip.width, clip.height, true);
    bitmapData.draw(clip);
    

    但是这里有很多问题 - 你必须在 enter_frame 循环而不是 for 循环上执行此操作(否则你只会得到第二帧 totalFrames 次,你必须有正确的安全性设置能够使用draw 功能,如果您的剪辑有奇怪的注册点位图将剪辑...

    【讨论】:

    • 我原以为第一个解决方案会在内存使用方面呈指数级膨胀(totalFrames*totalFrames),但如果不是很棒的话!试试看,谢谢。
    猜你喜欢
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 2013-04-08
    • 2011-05-27
    相关资源
    最近更新 更多