AS的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();
}
上一篇: 【好书推荐】《剑指Offer》之硬技能(编程题1~6)
下一篇: 我堂妹是医生