欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

AS的LoaderInfo类控制SWF的大小和播放帧频

程序员文章站 2022-07-11 10:03:02
AS3的 LoaderInfo 类为我们加载外部资源提供了更多的可控信息,以前制作SWF播放器的两大难题终于可以得到解决: * 获得加载SWF的舞台大小以缩放到适合尺寸显示 LoaderInfo 的 wi... 08-10-07...
as3的 loaderinfo 类为我们加载外部资源提供了更多的可控信息,以前制作swf播放器的两大难题终于可以得到解决:
* 获得加载swf的舞台大小以缩放到适合尺寸显示
loaderinfo 的 width 和 height 属性便是舞台大小。
* 使加载的swf按自己的帧频播放
loaderinfo 的 framerate 属性为加载swf的帧频,可以修改stage的 framerate 属性适应播放。
  做了一个 简单的例子 ,分别加载300×150帧频5和100×150帧频20的两个swf到200×200大小的区域播放,注释写的很详细,就不啰嗦了。
监听加载事件:

代码:
var t_info : loaderinfo = this.m_loader.contentloaderinfo;
t_info.addeventlistener(event.complete, this.onloaddone);
t_info.addeventlistener(ioerrorevent.io_error, this.onloaderror);
t_info.addeventlistener(progressevent.progress, this.onloadprogress);
显示加载进度:

代码:
private function onloadprogress(p_e : progressevent) : void
{
this.m_loading.progress(p_e.bytesloaded, p_e.bytestotal);
}
显示加载的swf:

代码:
// 隐藏loading
this.m_loading.hide();
// loaderinfo
var t_info : loaderinfo = this.m_loader.contentloaderinfo;
// 载入的mc
this.m_mc = t_info.content as movieclip;
// 载入mc的舞台宽度
var t_stagew : number = t_info.width;
// 载入mc的舞台高度
var t_stageh : number = t_info.height;
// 载入mc的实际宽度
var t_mcw : number = this.m_mc.width;
// 载入mc的实际高度
var t_mch : number = this.m_mc.height;
// 是否缩放mc适应显示宽度(载入mc舞台的宽高比是否大于显示区域宽高比)
var t_scalewidth : boolean = t_stagew / t_stageh > show_w / show_h;
// 缩放比率
var t_scalerate : number = t_scalewidth ? show_w / t_stagew : show_h / t_stageh;
// 缩放mc
this.m_mc.scalex = this.m_mc.scaley = t_scalerate;
// 显示载入mc的显示范围
this.m_mc.scrollrect = new rectangle(0, 0, t_stagew, t_stageh);
// 显示载入mc
this.addchild(this.m_mc);
// 调整显示位置
this.m_mc.x = show_x;
this.m_mc.y = show_y;
if (t_scalewidth) this.m_mc.y = (show_h - t_stageh * t_scalerate) / 2;
else this.m_mc.x = (show_w - t_stagew * t_scalerate) / 2;
// 修改帧频
this.stage.framerate = t_info.framerate;
this.fms.text = string(this.stage.framerate);
// 设置组件
this.sdr.enabled = this.btn1.enabled = this.btn2.enabled = true;
this.sdr.maximum = this.m_mc.totalframes;
// 监听mc事件
this.addeventlistener(event.enter_frame, this.onenterframe);
另外加了一个 slider 组件来控制播放,前提是加载的swf必须发布为player9,as3:

代码:
this.sdr.addeventlistener(sliderevent.change, this.onchangesdr);
this.sdr.addeventlistener(sliderevent.thumb_press, this.onpresssdr);
this.sdr.addeventlistener(sliderevent.thumb_release, this.onreleasesdr);
private function onchangesdr(p_e : sliderevent) : void
{
if (this.m_ispresssdr) this.m_mc.gotoandstop(p_e.value);
}
private function onpresssdr(p_e : sliderevent) : void
{
this.m_ispresssdr = true;
this.m_mc.stop();
}
private function onreleasesdr(p_e : sliderevent) : void
{
this.m_ispresssdr = false;
this.m_mc.play();
}