AS3通俗教程---AS3自身loading制作

简介:

AS3通俗教程---AS3自身loading制作

我也来学着写教程:lol  ,希望能对大家有所帮助,若发现问题欢迎指正!

先说主场景舞台有内容的项目(如MV)的做法:
有人问是不是new一个loader,然后loader.load(this),其实根本没这么麻烦,很简单,在文档类构造函数里写上:loaderInfo.addEventListener(ProgressEvent.PROGRESS,你的处理函数)就行了,处理函数这样写:
function 你的处理函数(e : ProgressEvent){
trace(e.bytesLoaded/e.bytesTotal);
}
就行了,简单吧!
再说界面代码分离项目(主舞台内容靠AS生成)的做法:
这个容易出错,常见错误是按照上面MV的loading一样做,这样的结果是loading一出来就是100%
原因在于界面代码分离项目主时间轴通常只有一帧,而flash会默认在第一帧导出类,并在此之后调用文档类的构造函数,也就是说progress事件的侦听是在加载完成后才起作用,当然看不到进度了!

解决方法一,双文件法(代码见回复),这种方法实际是绕过去了:
建立loader.as, 建loader.fla并设loader为文档类
建立main.as, 建main.fla并设main为文档类
在loader.as中
    new一个Loader实例 loader,并用load方法载入main.swf
    在 loader.contentLoaderInfo上添加progress和complete侦听
    在progress处理函数中更新textField,并在complete处理函数将loader.content添加到舞台
在main.as中
    构建舞台内容
解决方法二,双帧法,这才是真正解决:
但有个小遗憾是主时间轴是2帧,但已经不错了,呵呵
建立loader.as,再建立fla文件,保证主时轴有两帧且都为关键帧
在fla中:
    建立一个空Mc,将此Mc拖到主场景的第二帧
    001.jpg 
    双击编辑空元件,再将此元件的时间轴改为两帧且都为关键帧,进入第二帧,将库中所有链接到类的元件拖到舞台
    002.jpg 
    将所有链接到类的元件的链接属性中的“在第一帧导出”取消掉:
    003.gif 
在loader.as中
    建立textField并推入舞台, 构造函数中为loaderInfo添加progress和complete侦听
    在progress处理函数中更新textField,并在complete处理函数中再添加enter_frame侦听
    在enter_frame处理函数中构建舞台内容,并移除enter_frame侦听,也就是说让enter_frame处理函数执行一次就可以了

[ 本帖最后由 andy-tang 于 2007-11-28 11:04 编辑 ]
rar.gif

无效做法.rar (724.61 KB)

rar.gif

双文件.rar (727.04 KB)

rar.gif

双帧.rar (724.95 KB)

AS3及Game高级群:48089045欢迎加入!
无效代码:
  1. package {
  2. import flash.display.MovieClip;
  3. import flash.events.*;
  4. import flash.text.*;
  5. //////
  6. public class loader extends MovieClip {
  7.   var ttf=new TextField();///建立一个TextField实例
  8.   public function loader() {
  9.    addChild(ttf);/////////将TextField实例推到舞台
  10.    loaderInfo.addEventListener(ProgressEvent.PROGRESS,progressHandler);///当进度变化时更新TextField实例的text属性
  11.    loaderInfo.addEventListener(Event.COMPLETE,completeHandler);///////////当载入完成后显示内容
  12.   }
  13.   function progressHandler(e:ProgressEvent) {
  14.    ttf.text=e.bytesLoaded*100/e.bytesTotal;
  15.    trace(ttf.text);
  16.   }
  17.   function completeHandler(e:Event) {
  18.    removeChild(ttf);//////////////载入完成后移除进度显示文本
  19.    addChild(new main());
  20.   }
  21. }
  22. }
复制代码
双文件代码-loader.as
  1. package {
  2. import flash.display.MovieClip;
  3. import flash.display.Loader;
  4. import flash.net.URLRequest;
  5. import flash.text.*;
  6. import flash.events.*;
  7. ////
  8. public class loader extends MovieClip {
  9.   var mainLoader=new Loader();///建立一个Loader实例用于载入main.swf
  10.   var ttf=new TextField();///////建立一个TextField实例用于显示载入百分比
  11.   public function loader() {
  12.    addChild(ttf);///////////////////////////////////////将TextField实例显示到舞台
  13.    mainLoader.load(new URLRequest("main.swf"));/////////开始载入main.swf
  14.    mainLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,progressHandler);///当载入进度变化时更新进度显示
  15.    mainLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler); //////////当载入完成后将main.swf加到舞台
  16.   }
  17.   function progressHandler(e:ProgressEvent) {
  18.    ttf.text=(e.bytesLoaded*100/e.bytesTotal).toFixed(1);
  19.   }
  20.   function completeHandler(e:Event) {
  21.    addChild(mainLoader.content);
  22.   }
  23. }
  24. }
复制代码
双帧代码-loader.as
  1. package {
  2. import flash.display.MovieClip;
  3. import flash.events.*;
  4. import flash.text.*;
  5. import flash.net.*;
  6. //////
  7. public class selfloader extends MovieClip {
  8.   var ttf=new TextField  ;//仍然建立一个TextField实例
  9.   public function selfloader() {
  10.    addChild(ttf);////////仍然将TextField实例推到舞台
  11.    loaderInfo.addEventListener(ProgressEvent.PROGRESS,progressHandler);//仍然当进度变化时更新TextField实例的text属性
  12.    loaderInfo.addEventListener(Event.COMPLETE,completeHandler);//////////仍然当载入完成后显示内容
  13.   }
  14.   function progressHandler(e:ProgressEvent) {
  15.    ttf.text=e.bytesLoaded * 100 / e.bytesTotal.toFixed();
  16.    trace(ttf.text);
  17.   }
  18.   function completeHandler(e:Event) {
  19.    this.addEventListener(Event.ENTER_FRAME,enterframeHandler);//添加enter_frame侦听
  20.    trace("载入完成");
  21.   }
  22.   function enterframeHandler(e:Event) {
  23.    if (currentFrame == 1) {///////////////////////////////////////等于1或是2都可以,1更好
  24.     stop();//////////////////////////////////////////////////其实这个stop()可以不加,加上更好
  25.     removeChild(ttf);//////////////////////////////////////////////////仍然移除进度显示文本
  26.     this.removeEventListener(Event.ENTER_FRAME,enterframeHandler);/////必须移除侦听
  27.     addChild(new main  );
  28.     trace("OK");
  29.    }
  30.   }
  31. }
  32. }
复制代码
[ 本帖最后由 andy-tang 于 2007-11-24 00:43 编辑 ]
AS3及Game高级群:48089045欢迎加入!
本文转自jiahuafu博客园博客,原文链接http://www.cnblogs.com/jiahuafu/archive/2011/06/30/2094449.html如需转载请自行联系原作者

jiahuafu
相关文章
|
1月前
|
缓存
CocosCreator 面试题(十二)Cocos Creator Label 的原理以及如何减少Drawcall
CocosCreator 面试题(十二)Cocos Creator Label 的原理以及如何减少Drawcall
209 0
|
7月前
《QT从基础到进阶·十二》QPixmap.load加载图片不更新问题
《QT从基础到进阶·十二》QPixmap.load加载图片不更新问题
119 0
|
9月前
|
存储 JSON BI
一步步创建包含自定义 Screen 的 ABAP 程序的详细步骤试读版
一步步创建包含自定义 Screen 的 ABAP 程序的详细步骤试读版
|
JSON 小程序 前端开发
零基础学小程序 —— 页面配置和网络数据请求(五)(完结)
零基础学小程序 —— 页面配置和网络数据请求(五)(完结)
162 0
零基础学小程序 —— 页面配置和网络数据请求(五)(完结)
|
编解码 JavaScript 前端开发
揭秘Vue3官方教材动画制作过程,一文教会大家做代码演示GIF!
VueMastery是Vue官方推荐的视频课程平台。VueMastery的视频课程讲解非常透彻,PPT也是制作精良,恰当的动画能帮我们更快速的理解视频中的知识点。
364 0
揭秘Vue3官方教材动画制作过程,一文教会大家做代码演示GIF!
|
API vr&ar 图形学
【100个 Unity小知识点】☀️ | Unity中使用代码查询Draw call、Tris和Verts等信息
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
【100个 Unity小知识点】☀️ | Unity中使用代码查询Draw call、Tris和Verts等信息
|
vr&ar 图形学 Android开发
【100个 Unity小知识点】 | 启动unity应用时的 Unity Logo 删除/替换的三种方案
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
|
vr&ar 图形学
【Unity3D 灵巧小知识点】 | Unity中 OnEnable 和 Awake、Start 的区别
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、r美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。