我想在舞台上同时查看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>
查看屏幕上所有帧的最有效方法是什么?
提前致谢。
答案 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