Flex 3 - 电影剪辑 - 在舞台上查看多个帧

时间:2010-02-24 00:29:28

标签: flex actionscript-3

我想在舞台上同时查看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>

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

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

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

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

但是这里出现了很多问题 - 你必须在enter_frame循环而不是for循环中执行此操作(否则你只需要获得第2帧totalFrames次,你必须拥有正确的安全设置,以便能够使用draw功能,如果您的剪辑有奇怪的注册点,位图将剪辑...

答案 1 :(得分:0)

你的意思是同时所有的帧吗?像:

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转换是igonored