• 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 (724.61 KB)

    双文件.rar (727.04 KB)

    双帧.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欢迎加入!
  • 相关阅读:
    centos7+php7.1.4+mysql5.7+swoole搭建
    鄙视自己(转)
    Mysql的sql优化概念---三大范式
    PHP的设计模式-单例设计
    Composer的安装使用
    PHPstorm的一些快捷键
    论代码走查的重要性
    Java泛型读书笔记 (三)
    Java泛型读书笔记 (一)
    Java泛型读书笔记 (二)
  • 原文地址:https://www.cnblogs.com/jiahuafu/p/2094449.html
Copyright © 2020-2023  润新知