和我们一起放飞理想吧!
  • 本栏最新文章
摄影专辑AD
  • 本栏推荐文章
当前位置:应用教程首页 >> FLASH教程 >> 详细内容

一步一步学ActionScript 2.0(二十四)

2007-12-29 07:28:46    作者:时进军    来源:互联网    文字大小: |  | 
简介:外部swf、jpeg文件的装载   [学习目标]: 1、掌握外部swf、jpeg文件的装载方法,真正理解loadMovie() 、loadMovieNum() 的区别。 2、掌握层级的概念。 3、掌握外部swf、jpeg文件装载后的属性控制方法 4、对 ...
关键字:ActionScript 2.0 教程


外部swf、jpeg文件的装载  
 [学习目标]:
  1、掌握外部swf、jpeg文件的装载方法,真正理解loadMovie() 、loadMovieNum() 的区别。
  2、掌握层级的概念。
  3、掌握外部swf、jpeg文件装载后的属性控制方法
  4、对照onEnterFrame这个事件函数理解setInterval()在loading中的作用。
 在上讲给大家介绍了loading的制作原理和方法,其实虽然loding的样子很花哨,但基本as是不变的。现在给大家结束MC的另外的方法loadMovie() ,当然这里不局限在mc的方法上,因为还有全局函数可以完成同样的事情。在这里我就一起讲下,当然对于as2.0来说,用自定义类更好些,不过在没有给大家说自定义类的方法前,我还是不用类了。
 准备从下面几个方面介绍:
 ①用到的函数和方法
 ②层级的概念
 ④loadMovie() 、loadMovieNum() 的区别
 ⑤加载外部swf文件后,注册点问题
 ⑥加载下载进度的显示
 ⑦加载外部swf文件后,属性的控制
没有完。。最近事情多,在写
外部swf、jpeg文件的装载  
 [学习目标]:
  1、掌握外部swf、jpeg文件的装载方法,真正理解loadMovie() 、loadMovieNum() 的区别。
  2、掌握层级的概念。
  3、掌握外部swf、jpeg文件装载后的属性控制方法
  4、对照onEnterFrame这个事件函数理解setInterval()在loading中的作用。
 在上讲给大家介绍了loading的制作原理和方法,其实虽然loding的样子很花哨,但基本as是不变的。现在给大家介绍MC的另外的方法loadMovie() ,当然这里不局限在mc的方法上,因为还有全局函数可以完成同样的事情。在这里我们就一起讲下,当然对于as2.0来说,用自定义类更好些,不过在没有给大家说自定义类的方法前,我们还是不用类了。
 
 
  一般情况下,flash播放器仅能播放一个swf文件,但是很多情况下,需要同一个作品中播放更多的swf文件,比如我们做纯flash的网站,如果用一个swf文件,太大了,我们可以通过导航,装载其他的swf文件,另外,一些没源文件的AS效果动画,我们也可以调用成为自己作品的一部分。所以外部swf和jpeg文件的装载应用特别的广泛,是我们学as必须掌握的东西。
一、用到的函数和方法
在实现外部swf文件的装载一般有3个方法,其实就是4种函数或者方法罢了。
1、MC的方法: MovieClip.loadMovie()
 
方法 说明
MovieClip.loadMovie()  将指定的 SWF 文件加载到影片剪辑中。
MovieClip.unloadMovie()  删除用 loadMovie() 加载的 SWF 文件。

比如,我们把fish.swf装载到MC元件load_mc,可以这样:load_mc.loadMovie("fish.swf") ,如果卸载可以这样写:load_mc.unloadMovie();很简单吧。
2、全局函数loadMovie()、loadMovieNum()
函数 功能
loadMovie("url",target [, method])  在播放原始 SWF 文件的同时将 SWF 文件或 JPEG 文件加载到 Flash Player 中目标影片剪辑的路径
unloadMovie(target) 从 Flash Player 中删除通过 loadMovie() 加载的影片剪辑
loadMovieNum("url",level [, variables])  在播放原来加载的 SWF 文件的同时将 SWF 文件或 JPEG 文件加载到 Flash Player 中的某个层级。
unloadMovie(target) 从 Flash Player 中删除通过 loadMovieNum() 加载的影片
 如:
 loadMovie("01.swf", _root.load_mc) ;
 loadMovie("http://www.abc.com/01.jpg", _root.load_mc) ;
 loadMovieNum("01.swf", 100);
 unloadMovie ("_root.load_mc");
 unloadMovieNum(100);
两者的区别:loadMovie适宜加载到指定的某个MC目标;loadMovieNum适宜加载到某个层次级别。
3、MovieClipLoader类的loadClip()
 这个是新增加的类,这个类功能强大呀,有侦听机制,很方便装载进度的实现,完成可以代替上面的2个全局函数,后面我们用一讲专门介绍。
二、层级的概念
loadMovieNum()这个函数有个参数:level ,是装载的swf、jpeg文件放置的层级,那什么是层级呢?
对于同一时间轴上的层叠关系我们前面给大家讲了深度的概念,在外部swf文件通过loadMovieNum()装载到播放器也存在着层叠关系,这个层叠关系我们用层级来表示,我们知道每个Flash动画都有一个主时间轴,这个主时间轴就被FlashPlayer预置为最高级也就0级(_level0),如果用loadMovieNum()装载其他swf文件,我们可以让他放在不同的级,分别用些整数表示。这些整数就是层级,表示了不同的主时间轴的层叠关系,每个层级就是一个独立的主时间轴,好象一个独立的加工厂,可以拥有自己的MC。并且不同的层级同时运行着,互不干扰,是个平行关系,级别大的在最上面,也就是里我们观察动画的人最近。对于不同层级的MC对象的调用,我们可以用他们所在的层级来实现,比如有个fish.swf加在了200级,那我们可以这样_level200.stop();就是在级别前加个_level。大家可以通过下图理解:
上面的level0就是_root,每个层级就是个匣子,可以有自己的MC,级别大,越靠上。使用中,层级不需要连续的。
三、加载外部swf文件后,注册点、属性问题
   如果用"loadMovieNum()"加载到主场景中(level0),那么,外部swf文件将取代原动画内容,它的位置对准场景的左上角,如果加载到其它层次比如(leve288),那么原动画内容不受影响,位置同上。
 如果用"loadMovie()"加载到某个MC对象时,被加载swf文件的左上角对准该MC对象的"注册点",所以,用这样的方法可以准确控制被加载swf的位置。
 并且,loadMovie()的过程是先将影片中的原mc删除,这个过程会删除mc关联的一切外部as,比如_root.mc.onEnterFrame = function(){},然后将新mc加载进来,并继承原mc的一切内部属性(比如内部as,位置、旋转和缩放属性),但是注意这个过程并不会继承原mc的外部as。这就是为什么我们在loadMovie()的同时写_root.mc.onEnterFrame会失效的原因。解决的方法最好使用MovieClipLoader类来监听mc是否加载完成,加载完成后再写_root.mc.onEnterFrame。,原MC对象被加载swf文件替代,而且一旦卸载后原MC仍不可见,但它确实仍存在,你可连续加载。
  注意的问题,属性的控制必须加载完成后才起作用的。
四、setInterval()的使用
setInterval() 是播放 SWF 文件时,每隔一定的时间,就调用函数、方法或对象,相当于一个时间控制器。可以使用本动作更新来自数据库的变量或更新时间显示。setInterval动作的语法格式如下:
setInterval(function,interval[,arg1,arg2,......argn])
setInterval(object,methodName,interval[,arg1,arg2,.....argn])
  当需要把动作取消时,只要clearInterval( intervalID )就可以了。
需要注意的是:
 ①setInterval的函数必须要使用updateAfterEvent()来刷新显示效果。
 ②setInterval所设置的执行时间间隔并非按照你设置的间隔精确执行,一般都有几毫秒的误差。
 ③setInterval最多在一帧的时间里执行10次左右。
五、演示实例
要求:演示各个函数或方法完成swf、jpeg文件的装载,并改变装载后的属性。
步骤:这个例子的步骤太多了,我把as代码放在这里,其他的大家下了源码看着自己做一遍,会了这个例子一定可以掌握外部swf、jpg文件的调用的。
 1、场景 1:MovieClip.loadMovie()的演示
 stop();
      load1_btn.onPress = function() {
       load1_mc.loadMovie("fish.swf");
       //progress_txt._visible = true;
       clearInterval(loadingID);
       loadingID = setInterval(checkLoadingStatus, 50, load1_mc);
      };
      unload1_btn.onPress = function() {
       load1_mc.unloadMovie();
       //progress_txt._visible = true;
       progress_txt.text = "Unload Complete";
      };
      unload2_btn.onPress = function() {
       load2_mc.unloadMovie();
       //progress_txt._visible = true;
       progress_txt.text = "Unload Complete";
      };
      load2_btn.onPress = function() {
       load2_mc.loadMovie("fish.swf");
       //progress_txt._visible = true;
       clearInterval(loadingID);
       loadingID = setInterval(checkLoadingStatus, 50, load2_mc);
      };
      next_btn.onPress = function() {
       nextScene();
      };
      checkLoadingStatus = function (objname) {
       if (objname) {
        var bytesTotal = objname.getBytesTotal();
        if (isNaN(bytesTotal) || bytesTotal == 0) {
         progress_txt.text = "Loading...";
        } else {
         var bytesLoaded = objname.getBytesLoaded();
         if (bytesLoaded == bytesTotal) {
         progress_txt.text = "Loading Complete";
         // progress_txt._visible = false;
          clearInterval(loadingID);
         } else {
          progress_txt.text =
      "LOADING: "+Math.round(bytesLoaded/1024)
      +"/"+Math.round(bytesTotal/1024)+" KB";
         }
        }
        updateAfterEvent();
        // 刷新显示效果
       }
      };
 
 
2、场景 2:loadMovie()的演示
stop();
load1_btn.onPress = function() {
 loadMovie("loadjpg.jpg", "load1_mc");
 //progress_txt._visible = true;
 clearInterval(loadingID);
loadingID = setInterval(checkLoadingStatus, 50, load1_mc);
};
load2_btn.onPress = function() {
 loadMovie("fish.swf", "load2_mc");
 //progress_txt._visible = true;
 clearInterval(loadingID);
 loadingID = setInterval(checkLoadingStatus, 50, load2_mc);
};
unload1_btn.onPress = function() {
 unloadMovie("load1_mc");
 //progress_txt._visible = true;
 progress_txt.text = "Unload Complete";
};
unload2_btn.onPress = function() {
 unloadMovie("load2_mc");
 //progress_txt._visible = true;
 progress_txt.text = "Unload Complete";
};
next_btn.onPress = function() {
 nextScene();
};
prev_btn.onPress = function() {
 prevScene();
};
checkLoadingStatus = function (objname) {
 if (objname) {
  var bytesTotal = objname.getBytesTotal();
  if (isNaN(bytesTotal) || bytesTotal == 0) {
   progress_txt.text = "Loading...";
  } else {
   var bytesLoaded = objname.getBytesLoaded();
   if (bytesLoaded == bytesTotal) {
   progress_txt.text = "Loading Complete";
   // progress_txt._visible = false;
   clearInterval(loadingID);
   } else {
    progress_txt.text =
"LOADING: "+Math.round(bytesLoaded/1024)
+"/"+Math.round(bytesTotal/1024)+" KB";
   }
  }
  updateAfterEvent();
  // 刷新显示效果
 }
};
 
3、场景 3:loadMovieNum()的演示
stop();
loadlevel1_btn.onPress = function() {
 loadMovieNum("loadjpg.jpg", 100);
 //progress_txt._visible = true;
 clearInterval(loadingID);
 loadingID = setInterval(checkLoadingStatus, 50, _level100);
};
loadlevel2_btn.onPress = function() {
 loadMovieNum("fish.swf", 200);
 //progress_txt._visible = true;
 clearInterval(loadingID);
 loadingID = setInterval(checkLoadingStatus, 50, _level200);
};
unloadlevel1_btn.onPress = function() {
 unloadMovieNum(100);
 //progress_txt._visible = true;
 progress_txt.text = "Unload Complete";
};
unloadlevel2_btn.onPress = function() {
 unloadMovieNum(200);
 //progress_txt._visible = true;
 progress_txt.text = "Unload Complete";
};
next_btn.onPress = function() {
 nextScene();
};
prev_btn.onPress = function() {
 prevScene();
};
checkLoadingStatus = function (objname) {
 if (objname) {
  var bytesTotal = objname.getBytesTotal();
  if (isNaN(bytesTotal) || bytesTotal == 0) {
   progress_txt.text = "Loading...";
  } else {
   var bytesLoaded = objname.getBytesLoaded();
   if (bytesLoaded == bytesTotal) {
   progress_txt.text = "Loading Complete";
   // progress_txt._visible = false;
    clearInterval(loadingID);
   } else {
    progress_txt.text =
 "LOADING: "+Math.round(bytesLoaded/1024)
 +"/"+Math.round(bytesTotal/1024)+" KB";
   }
  }
  updateAfterEvent();
  // 刷新显示效果
 }
};
 
4、场景 4:继承原来MC的属性演示
play();
load1_btn.onPress = function() {
 loadMovie("fish.swf", "load1_mc");
 //progress_txt._visible = true;
 clearInterval(loadingID);
 loadingID = setInterval(checkLoadingStatus, 50, load1_mc);
};
unload1_btn.onPress = function() {
 unloadMovie("load1_mc");
 //progress_txt._visible = true;
 progress_txt.text = "Unload Complete";
};
prev_btn.onPress = function() {
 prevScene();
};
next_btn.onPress = function() {
 nextScene();
};
checkLoadingStatus = function (objname) {
 if (objname) {
  var bytesTotal = objname.getBytesTotal();
  if (isNaN(bytesTotal) || bytesTotal == 0) {
   progress_txt.text = "Loading...";
  } else {
  var bytesLoaded = objname.getBytesLoaded();
   if (bytesLoaded == bytesTotal) {
   progress_txt.text = "Loading Complete";
   // progress_txt._visible = false;
    _root.loadcfg = true;
    clearInterval(loadingID);
   } else {
    progress_txt.text =
 "LOADING: "+Math.round(bytesLoaded/1024)
 +"/"+Math.round(bytesTotal/1024)+" KB";
   }
  }
  updateAfterEvent();
  // 刷新显示效果
 }
};
 
5、场景 5:改变装载的swf属性的演示
stop();
loadcfg=false;
load1_btn.onPress = function() {
 loadMovie("loadjpg.jpg", "load1_mc");
 //progress_txt._visible = true;
 clearInterval(loadingID);
 loadingID = setInterval(checkLoadingStatus, 50, load1_mc);
};

unload1_btn.onPress = function() {
 unloadMovie("load1_mc");
 //progress_txt._visible = true;
 progress_txt.text = "Unload Complete";
};
onEnterFrame = function () {
  if ( _root.loadcfg ) {
    with (load1_mc ) {
        _x = 350 ;
        _y = 100 ;
  _alpha=50;
  _rotation=30;
  _width=400;
    }
    delete onEnterFrame ;
  }
};
prev_btn.onPress = function() {
 prevScene();
};
checkLoadingStatus = function (objname) {
 if (objname) {
  var bytesTotal = objname.getBytesTotal();
  if (isNaN(bytesTotal) || bytesTotal == 0) {
   progress_txt.text = "Loading...";
  } else {
   var bytesLoaded = objname.getBytesLoaded();
   if (bytesLoaded == bytesTotal) {
   progress_txt.text = "Loading Complete";
   // progress_txt._visible = false;
   _root.loadcfg=true;
    clearInterval(loadingID);
   } else {
    progress_txt.text =
"LOADING: "+Math.round(bytesLoaded/1024)
+"/"+Math.round(bytesTotal/1024)+" KB";
   }
  }
  updateAfterEvent();
  // 刷新显示效果
 }
};
 
说明:
 1、上面的代码基本是相同的,其中checkLoadingStatus 函数是完成装载进度的,你不要也是可以的。因为如果需要调入的进度显示用MovieClipLoader类更方便的。其他的就是几个按钮的函数了。
 2、在你自己做的过程中,你做完第一个场景,其他的进行场景复制,然后修改就可以了

这讲给大家说了swf、jpeg文件的装载方法,大家应掌握的重点loadMovie和loadMovieNum区别、调入后的定位、属性的控制。理解层级到底是什么。把这节的例子自己做一 遍,这样会有助你的理解的。

相关文章
绵阳网警