flash素材:Flash AS入门教程第 7课:影片剪辑第 2节加载swf文件

  上节中我们已经能创建MC本节我们将介绍加载外部swf文件思路方法

  loadMovie及MCloadMovie()思路方法:

  使用 loadMovie 可以在播放原始 SWF 文件时将 SWF、JPEG、GIF 或 PNG 文件加载到 Flash Player 中影片剪辑中加载图像或 SWF 文件左上角和目标影片剪辑注册点对齐

  格式:loadMovie(“要加载swf文件或图片“目标影片剪辑);

  要加载swf文件或图片可以来源于网络书写格式为:http://....

  可以来源于本地硬盘上文件系统书写格式为:file:///.......

  如果要加载swf文件或图片和fla文件在同目录下则直接写文件名

  目标影片剪辑可以是任何影片剪辑也可以是主场景加载后目标影片剪辑将被替换成加载文件

  例1:加载个网络上swf文件sub.swf到创建MC中:

this.createEmptyMovieClip("logo_mc", 1); 
loadMovie("http://www.jcwcn.com/sub.swf", logo_mc); 


  例2:加载个本地swf文件sub.swf到主舞台:

  loadMovie("file:///d:/myflash/sub.swf", this); 

  例3:加载个相同目录下图片picture.jpg到创建MC中:

this.createEmptyMovieClip("picture_mc", 1); 
loadMovie("picture.jpg",picture_mc); 


  以上是loadMovie写法而MCloadMovie()思路方法也只写法区别如:

this.createEmptyMovieClip("picture_mc", 1); 
picture_mc.loadMovie("picture.jpg");


  loadMovieNum

  在播放原始 SWF 文件时将 SWF、JPEG、GIF 或 PNG 文件加载到个级别中使用方法跟loadMovie只是它不是指明目标影片剪辑而加载到个深度上比如要加载相同目录下swf文件myflash.swf到深度为2级别中:

  loadMovieNum(“myflash.swf”,2);

  要注意节我们介绍了当深度相同时新加载对象会覆盖原来对象我们也以用下面句来加载外部swf文件:

  loadMovieNum(“myflash.swf”,this.getNextHighestDepth);

  MovieClipLoader类

  此类用于实现在 SWF、JPEG、GIF 和 PNG 文件正被加载到影片剪辑中时提供状态信息侦听器回调也就是说用这类加载swf文件可以在加载过程中进行控制如观察加载进度等要使用 MovieClipLoader类就应首先用构造创建个MovieClipLoader类例子才能操作其思路方法事件实现加载功能如:

  var mcLoader:MovieClipLoader = MovieClipLoader;

  loadClip思路方法:该思路方法作用和使用方法和loadMovie()是如:

this.createEmptyMovieClip("picture_mc", 1); 
var mcLoader:MovieClipLoader =  MovieClipLoader; 
mcLoader.loadClip("picture.jpg",picture_mc); 


  上面说到用本类加载外部swf文件或图片可以在加载过程中加以操作主要是通过几个事件来实现:onLoadStart事件:在下载文件个字节写入硬盘后

  格式: _disibledevent=>  其中target_mc为要加载外部影片目标MC

  onLoadComplete事件:

  当加载文件完全下载时

  格式:onLoadComplete = function([target_mc: MovieClip]) {}

  onLoadInit事件:

  当执行加载剪辑帧上动作时

  在此侦听器后您可以设置属性、使用思路方法还可以和加载影片交互

  格式:onLoadInit = function([target_mc: MovieClip]) {}了解 MovieClipLoader.onLoadComplete和 MovieClipLoader.onLoadInit的间差异非常重要onLoadComplete事件在加载 SWF、JPEG、GIF 或 PNG 文件的后但在应用化的前被此时无法访问已加载影片剪辑思路方法和属性因此您无法、移动到特定帧等等在多数情况下最好改为使用 _disibledevent=>  loadedBytes 为已经加载字节数totalBytes为要加载swf字节数如果在测试模式中您试图对驻留在硬盘上本地文件使用 _disibledevent=>服务器关闭、找不到文件或发生安全侵犯

  上述事件思路方法我给你整成个公式模式直接套用就行了

  MovieClipLoader类事件公式:

//首先创建个MovieClipLoader对象 
var mcLoader:MovieClipLoader =  MovieClipLoader;//mcLoader为自已取名称 
//然后创建个侦听对象 
var listener:Object =  Object;//listener为自已取名称 
//下列事件的或多个 
listener.onLoadStart = function(target_mc:MovieClip) {} 
listener.onLoadComplete = function([target_mc: MovieClip]) {} 
listener.onLoadInit = function([target_mc: MovieClip]) {} 
listener.onLoadProgress = function([target_mc: MovieClip], 
loadedBytes: Number, totalBytes: Number) {} 
//MovieClipLoader对象侦听对象 
mcLoader.addListener(listener); 
//MovieClipLoader对象加载外部swf或图片 
mcLoader.loadClip(“外部文件地址”目标影片剪辑);


  下面介绍MovieClipLoader类几个思路方法

  loadClip思路方法:

  在播放原始影片时将 SWF、JPEG、渐进式 JPEG、非动画 GIF 或 PNG 文件加载到 Flash Player 中影片剪辑中

  addListener(侦听对象)思路方法:

  注册个对象以便在 MovieClipLoader 事件处理时接收通知

  getProgress(target: Object)思路方法:

  返回正在通过使用 MovieClipLoader.loadClip

  加载文件已加载字节数和总字节数;返回个具有以下两个整数属性对象:sLoaded

  和 sTotal

  removeListener(侦听对象)思路方法:

  删除在 MovieClipLoader 事件处理时用来接收通知侦听器

  unloadClip(target: Object)思路方法:

  删除通过使用 MovieClipLoader.loadClip 加载影片剪辑

  下面通过个练习来加深理解本节课所介绍内容主要运用MovieClipLoader类来加载外部文件加载过程中用进度条来显示加载进度本节练习请保存原文件待下节控制时间轴后将在本练习基础上完成个播放器



  、新建flash文档然后在第层画个播放器外形这个我不作介绍我画如下图你完全可以画得更好看这里要说说中间播放屏幕(黑那块)大小问题Flash文档默认大小是550x400那么这个播放屏幕也应按这个比例来画大小是文档大小80%因此宽为:550x0.8=440高为400x0.8=320.将这个播入屏幕水平居中尽量往上放将下面多留些地盘以后有用然后用变形工具点中它将注册点移到左上角打开属性面板记录下它x,y坐标备用图层上锁

Flash AS入门教程第 7课:影片剪辑第 2节加载swf文件

   2、新插入图层按下图位置放个静态文本内容为:“文件地址:”;再放个输入文本在属性面板例子名称为:url_txt.新建按钮元件标签为:“打开”属性面板例子名称为:load_btn.将按钮放输入文本右边

   3、新建MC取名loading,用矩形工具禁止笔触绿色填充个300x5矩形然后转换成MC双击它进新MC编辑窗口将矩形条垂直居中左对齐打开属性面板为例子名称取名为:“loadt_mc”.回到loading元件编辑窗口将矩形元件垂直居中左对齐在矩形元件上面放静态文本内容为:“正在加载文件请稍候…”.在库中右击loading元件点连接在“为 ActionScript导出“前打钩在标识标中输入:loading实际上那里本来就有了不用输哈确定

   4、好了接下来写代码新建取名为“action”.

  打开帧到作面板输入如下语句:

load_btn.onRelease =function{ 
attachMovie("loading","loading_mc",getNextHighestDepth); 
loading_mc._x=80; 
loading_mc._y=215; 
loading_mc.loadt_mc._xscale=0; 
var swfurl = url_txt.text; 
var type = swfurl.substr(-3,3); 
createEmptyMovieClip("swf_mc", 1); 
var mcLoader:MovieClipLoader =  MovieClipLoader; 
var listener:Object =  Object; 
listener.onLoadProgress = function(target:MovieClip, sLoaded:Number, sTotal:Number):Void { 
loading_mc.loadt_mc._xscale=Math.floor((sLoaded/sTotal)*100); 

} 
listener.onLoadInit = function(swf_mc){ 
loading_mc.removeMovieClip; 
swf_mc._x=60; 
swf_mc._y=8; 
(type  "swf"){ 
swf_mc._xscale=swf_mc._yscale=80; 
}  { 
while((swf_mc._width>440)||(swf_mc._height>320)){ 
swf_mc._xscale -=1; 
swf_mc._yscale -=1; 
} 
} 
} 
mcLoader.addListener(listener); 
mcLoader.loadClip(swfurl,swf_mc); 
}


  测试影片在文本框中输入外部swf或图片地址点击打开外部文件将加载到播放窗口中播放注意:如果外部文件在网络上那么就必须用http://.....格式如果在本地硬盘上则应输入完整路径如果和本swf文件在同个目录中则只须输入文件名即可

  下面我们来分析下代码

  代码分析:

  代码全部放在按钮点击事件中:

  load_btn.onRelease =function{ 

  首先将进度条从库中加载到舞台上并设置它位置使它处于播入屏幕中间现在还没有开始下载所以设置进度条长度为0.

attachMovie("loading","loading_mc",getNextHighestDepth); 
loading_mc._x=80; 
loading_mc._y=215; 
loading_mc.loadt_mc._xscale=0; 


  接下来声明个变量swfurl来存放用户在地址文本中输入外部文件地址用type来存放地址最后 3个用以判断加载是swf还是图片

var swfurl = url_txt.text; 
var type = swfurl.substr(-3,3); 


  创建个空MC用来加载外部文件

  createEmptyMovieClip("swf_mc", 1); 

  创建个MovieClipLoader对象用于加载外部文件创建个侦听对象用于MovieClipLoader事件

var mcLoader:MovieClipLoader =  MovieClipLoader; 
var listener:Object =  Object; 


  onLoadProgress事件即在下载过程中读取已下载字节数和总字节数并用它们比值设置进度条长度

listener.onLoadProgress = function(target:MovieClip, sLoaded:Number, sTotal:Number):Void { 
loading_mc.loadt_mc._xscale=Math.floor((sLoaded/sTotal)*100); 
} 


  onLoadInit在加载完成后删除进度条并设置加载文件位置和大小使的适应播入屏幕大小上面我们记录播放屏幕左上角坐标现在有用了将加载文件坐标设为记录文件大小首先判定加载是swf文件还是图片为什么在判断呢?这是加载swf文件后目标MC _width和_hight就失灵了因而就只能用_xscaleswf_,_yscale 来控制很显然这不科学加载swf大小不可能都按比例缩放无法达到精确尽寸所以我们只能把要加载swf文件看成550x400大小来缩小到80%而图片则可用宽高属性来设置所以分开来整精确个算按上面存用户输入地址最后 3个如果是swf那么就是加载 swf文件了就用_xscaleswf_,_yscale来控制如果不是则是加载图片那么就可用宽高属性来判断加载图片是否大于播放屏幕如果大了则调整_xscaleswf_,_yscale属性使的减小为什么还是调整_xscaleswf_,_yscale呢?这是为了使保持宽高比例以免变形

listener.onLoadInit = function(swf_mc){ 
loading_mc.removeMovieClip; 
swf_mc._x=60; 
swf_mc._y=8; 
(type  "swf"){ 
swf_mc._xscale=swf_mc._yscale=80; 
}  { 
while((swf_mc._width>440)||(swf_mc._height>320)){ 
swf_mc._xscale -=1; 
swf_mc._yscale -=1; 
} 
} 
} 


  最后MovieClipLoader对象侦听侦听对象加载影片

mcLoader.addListener(listener); 
mcLoader.loadClip(swfurl,swf_mc); 


  作业:

  制作这个播放器



Tags:  flash素材

延伸阅读

最新评论

发表评论