[英]Flex 3 - Movie Clips - Viewing multiple frames on the stage
我想在舞台上同时从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>
在屏幕上查看所有帧的最有效方法是什么?
提前致谢。
最简单的方法是只加载SWF clip.totalFrames
次,将每个实例gotoAndStop
加载到不同的帧,然后以某种有意义的方式将它们全部添加到舞台上。 通常,您的浏览器会在首次加载后缓存SWF,因此这并不像您想象的那样可怕。
所述替代解决方案是gotoAndStop
到每个帧,然后
var bitmapData:BitmapData = new BitmapData(clip.width, clip.height, true);
bitmapData.draw(clip);
但是这里有很多地方出了问题-您必须在enter_frame循环而不是for循环上执行此操作(否则,您只需要获得第二帧totalFrames
次,就必须具有正确的安全设置才能使用draw
功能,如果您的剪辑具有奇怪的注册点,则位图将剪辑...
您是同时表示所有帧吗? 喜欢:
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转换
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.