·您当前的位置:首页 > 技术教程 > 播放器教程 >

[AS3]as3.0制作加载SWF文件的播放器源代码(2)

时间:2012-08-31 09:07eidiot.net
源代码: packagenet.eidiot.player { importfl.controls.*; importfl.events.SliderEvent; importflash.display.*; importflash.events.*; importflash.geom.Rectangle; importflash.net.URLRequest; /** *SWF播放

源代码:

  1. package net.eidiot.player  
  2. {  
  3.     import fl.controls.*;  
  4.     import fl.events.SliderEvent;  
  5.  
  6.     import flash.display.*;  
  7.     import flash.events.*;  
  8.     import flash.geom.Rectangle;  
  9.     import flash.net.URLRequest;  
  10.  
  11.     /**  
  12.      * SWF播放器  
  13.      *  
  14.      * @author    eidiot (http://eidiot.net)  
  15.      * @date    070613  
  16.      * @version    0.1.070616  
  17.      */  
  18.     public class SWFPlayer extends Sprite  
  19.     {  
  20.         /* 载入MC的显示区域 */  
  21.         private static const SHOW_X : Number = 20;  
  22.         private static const SHOW_Y : Number = 20;  
  23.         private static const SHOW_W : Number = 200;  
  24.         private static const SHOW_H : Number = 200;  
  25.         /* ui */  
  26.         public var btn1 : Button;  
  27.         public var btn2 : Button;  
  28.         public var fms : TextInput;  
  29.         public var sdr : Slider;  
  30.         /* 加载 */  
  31.         private var m_urlList : Array = ["mc1.swf", "mc2.swf"];  
  32.         private var m_request : URLRequest;  
  33.         private var m_loader : Loader;  
  34.         private var m_loading : SWFLoading;  
  35.         private var m_mc : MovieClip;  
  36.         /* 状态变量 */  
  37.         private var m_isPressSdr : Boolean = false;  
  38.  
  39.         /**  
  40.          * 构造函数  
  41.          */  
  42.         public function SWFPlayer()  
  43.         {  
  44.             this.init();  
  45.         }  
  46.         /**  
  47.          * @private  
  48.          * 初始化  
  49.          */  
  50.         private function init() : void  
  51.         {  
  52.             /* init ui */  
  53.             this.btn1.addEventListener(MouseEvent.CLICK, this.onClickBtn1);  
  54.             this.btn2.addEventListener(MouseEvent.CLICK, this.onClickBtn2);  
  55.             this.sdr.liveDragging = true;  
  56.             this.sdr.addEventListener(SliderEvent.CHANGE, this.onChangeSdr);  
  57.             this.sdr.addEventListener(SliderEvent.THUMB_PRESS, this.onPressSdr);  
  58.             this.sdr.addEventListener(SliderEvent.THUMB_RELEASE, this.onReleaseSdr);  
  59.             thisthis.sdr.enabled = this.fms.enabled = false;  
  60.             /* init load */  
  61.             this.m_request = new URLRequest();  
  62.             this.m_loading = new SWFLoading(SHOW_W, SHOW_H, SHOW_X, SHOW_Y);  
  63.         }  
  64.         /**  
  65.          * @private  
  66.          * 加载MC  
  67.          *  
  68.          * @param p_index    MC(地址在m_urlList中的)索引  
  69.          */  
  70.         private function loadMc(p_index : int) : void  
  71.         {  
  72.             /* reset ui */  
  73.             this.sdr.value = 0;  
  74.             thisthis.sdr.enabled = this.btn1.enabled = this.btn2.enabled = false;  
  75.             /* 移除已经加载的mc */  
  76.             if (this.m_mc != null)  
  77.             {  
  78.                 this.removeEventListener(Event.ENTER_FRAME, this.onEnterFrame);  
  79.                 this.removeChild(this.m_mc);  
  80.                 this.m_mc = null;  
  81.             }  
  82.             /* 加载新的MC */  
  83.             thisthis.m_request.url = this.m_urlList[p_index];  
  84.             this.m_loader = new Loader();  
  85.             this.initLoaderEvent();  
  86.             this.m_loader.load(this.m_request);  
  87.             this.m_loading.show(this);  
  88.         }  
  89.         /**  
  90.          * @private  
  91.          * 显示加载的MC  
  92.          */  
  93.         private function showSWF() : void  
  94.         {  
  95.             // 隐藏loading  
  96.             this.m_loading.hide();  
  97.             // loaderInfo  
  98.             var t_info : LoaderInfo = this.m_loader.contentLoaderInfo;  
  99.             // 载入的MC  
  100.             this.m_mc = t_info.content as MovieClip;  
  101.             // 载入MC的舞台宽度  
  102.             var t_stageW : Number = t_info.width;  
  103.             // 载入MC的舞台高度  
  104.             var t_stageH : Number = t_info.height;  
  105.             // 载入MC的实际宽度  
  106.             var t_mcW : Number = this.m_mc.width;  
  107.             // 载入MC的实际高度  
  108.             var t_mcH : Number = this.m_mc.height;  
  109.             // 是否缩放MC适应显示宽度(载入MC舞台的宽高比是否大于显示区域宽高比)  
  110.             var t_scaleWidth : Boolean = t_stageW / t_stageH > SHOW_W / SHOW_H;  
  111.             // 缩放比率  
  112.             var t_scaleRate : Number = t_scaleWidth ? SHOW_W / t_stageW : SHOW_H / t_stageH;  
  113.             // 缩放MC  
  114.             thisthis.m_mc.scaleX = this.m_mc.scaleY = t_scaleRate;  
  115.             // 显示载入MC的显示范围  
  116.             this.m_mc.scrollRect = new Rectangle(0, 0, t_stageW, t_stageH);  
  117.             // 显示载入MC  
  118.             this.addChild(this.m_mc);  
  119.             // 调整显示位置  
  120.             this.m_mc.x = SHOW_X;  
  121.             this.m_mc.y = SHOW_Y;  
  122.             if (t_scaleWidth) this.m_mc.y += (SHOW_H - t_stageH * t_scaleRate) / 2;  
  123.             else this.m_mc.x += (SHOW_W - t_stageW * t_scaleRate) / 2;  
  124.             // 修改帧频  
  125.             this.stage.frameRate = t_info.frameRate;  
  126.             this.fms.text = String(this.stage.frameRate);  
  127.             // 设置组件  
  128.             thisthis.sdr.enabled = this.btn1.enabled = this.btn2.enabled = true;  
  129.             thisthis.sdr.maximum = this.m_mc.totalFrames;  
  130.             // 监听MC事件  
  131.             this.addEventListener(Event.ENTER_FRAME, this.onEnterFrame);  
  132.         }  
  133.         /**  
  134.          * @private  
  135.          * 初始化加载事件  
  136.          */  
  137.         private function initLoaderEvent() : void  
  138.         {  
  139.             var t_info : LoaderInfo = this.m_loader.contentLoaderInfo;  
  140.             t_info.addEventListener(Event.COMPLETE, this.onLoadDone);  
  141.             t_info.addEventListener(IOErrorEvent.IO_ERROR, this.onLoadError);  
  142.             t_info.addEventListener(ProgressEvent.PROGRESS, this.onLoadProgress);  
  143.         }  
  144.         /**  
  145.          * @private  
  146.          * 移除加载事件  
  147.          */  
  148.         private function killLoaderEvent() : void  
  149.         {  
  150.             var t_info : LoaderInfo = this.m_loader.contentLoaderInfo;  
  151.             t_info.removeEventListener(Event.COMPLETE, this.onLoadDone);  
  152.             t_info.removeEventListener(IOErrorEvent.IO_ERROR, this.onLoadError);  
  153.             t_info.removeEventListener(ProgressEvent.PROGRESS, this.onLoadProgress);  
  154.         }  
  155.         /* onEnterFrame事件 */  
  156.         private function onEnterFrame(p_e : Event) : void  
  157.         {  
  158.             thisthis.sdr.value = this.m_mc.currentFrame;  
  159.         }  
  160.         /* ui 事件 */  
  161.         private function onClickBtn1(p_e : MouseEvent) : void  
  162.         {  
  163.             this.loadMc(0);  
  164.         }  
  165.         private function onClickBtn2(p_e : MouseEvent) : void  
  166.         {  
  167.             this.loadMc(1);  
  168.         }  
  169.         private function onChangeSdr(p_e : SliderEvent) : void  
  170.         {  
  171.             if (this.m_isPressSdr) this.m_mc.gotoAndStop(p_e.value);  
  172.         }  
  173.         private function onPressSdr(p_e : SliderEvent) : void  
  174.         {  
  175.             this.m_isPressSdr = true;  
  176.             this.m_mc.stop();  
  177.         }  
  178.         private function onReleaseSdr(p_e : SliderEvent) : void  
  179.         {  
  180.             this.m_isPressSdr = false;  
  181.             this.m_mc.play();  
  182.         }  
  183.         /* 加载事件 */  
  184.         private function onLoadDone(p_e : Event) : void  
  185.         {  
  186.             this.killLoaderEvent();  
  187.             this.m_loading.hide();  
  188.             this.showSWF();  
  189.         }  
  190.         private function onLoadError(p_e : Event) : void  
  191.         {  
  192.             this.killLoaderEvent();  
  193.             this.m_loading.showError();  
  194.         }  
  195.         private function onLoadProgress(p_e : ProgressEvent) : void  
  196.         {  
  197.             this.m_loading.progress(p_e.bytesLoaded, p_e.bytesTotal);  
  198.         }  
  199.     }  
  200. }  
  201.     import flash.text.TextField;  
  202.     import flash.display.DisplayObjectContainer;  
  203.     import flash.text.TextFieldAutoSize;  
  204.  
  205.     /**  
  206.      * 加载进度显示  
  207.      */  
  208.     internal class SWFLoading extends TextField  
  209.     {  
  210.         /**  
  211.          * 构造函数  
  212.          *  
  213.          * @param p_w    显示宽度  
  214.          * @param p_h    显示高度  
  215.          * @param p_x    x坐标  
  216.          * @param p_y    y坐标  
  217.          */  
  218.         public function SWFLoading(p_w : Number, p_h : Number, p_x : Number = 0, p_y : Number = 0)  
  219.         {  
  220.             this.text = "正在加载SWF ... ";  
  221.             this.width = p_w;  
  222.             this.autoSize = TextFieldAutoSize.CENTER;  
  223.             this.selectable = false;  
  224.             this.x += p_x;  
  225.             this.y += p_y + (p_h - this.height) / 2;  
  226.         }  
  227.         /**  
  228.          * 显示  
  229.          *  
  230.          * @param p_parent 父容器  
  231.          */  
  232.         internal function show(p_parent : DisplayObjectContainer) : void  
  233.         {  
  234.             p_parent.addChild(this);  
  235.         }  
  236.         /**  
  237.          * 隐藏  
  238.          */  
  239.         internal function hide() : void  
  240.         {  
  241.             if (this.parent != null) this.parent.removeChild(this);  
  242.         }  
  243.         /**  
  244.          * 更新加载进度  
  245.          *  
  246.          * @param p_loaded    已加载字节  
  247.          * @param p_total    文件总字节  
  248.          */  
  249.         internal function progress(p_loaded : Number, p_total : Number) : void  
  250.         {  
  251.             this.text = "正在加载SWF ... " + int(p_loaded / p_total * 100) + "%";  
  252.         }  
  253.         /**  
  254.          * 显示信息  
  255.          *  
  256.          * @param p_info    文字信息  
  257.          */  
  258.         internal function showInfo(p_info : String) : void  
  259.         {  
  260.             this.text = p_info;  
  261.         }  
  262.         /**  
  263.          * 显示加载失败  
  264.          * @param p_info    错误信息  
  265.          */  
  266.         internal function showError(p_info : String = null) : void  
  267.         {  
  268.             this.text = p_info == null ? "SWF加载失败" : p_info;  
  269.         }  
  270.     } 

 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器