• 2008-01-25

    as 3.0 事件 声明 - [as 3.0]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://wxsr.blogbus.com/logs/14458227.html

    as3.0为我们带来了一个强大的事件机制,这是我们的一个福音;但相当一部分人对于这个实用的机制可能还只处于了解阶段;

    下面我结合下 自定义的loadVar类  为大家介绍下怎么使用这个强大的事件机制为自己写的类声明一个事件吧~

    例子是个简单的小说阅读器

     在loadVar类中我声明了两个事件:COMPLETE事件跟IOERROR事件

    看了脚本相信大家也发现了~我的这两个事件都是基于URLLoader对应的两个事件触发后通过dispatchEvent将事件调度到事件流中的那样的话我们就可以间接获取URLLoader的事件返回的值了;

     

    由于不能上传附件的原因请大新建一个fla文件

    在场景中放一个名为txt的动态文本事例;两个分别为btn1跟btn2的mc元件

    并将loadVar类以loadVar.as为文件名拷贝到org/net目录下

    package org.net{

     import flash.events.*;
     import flash.net.*;

     public class LoadVar extends EventDispatcher {

    //COMPLETE事件

      public static  const COMPLETE:String = "loadVarComplete";
    //IOERROR事件  

    public static  const IOERROR:String = "loadVarIoError";

      private var __sender:URLRequest;
      private var __loader:URLLoader;
      public var result;

      public function LoadVar() {
      }
      public function load(link) {
       __sender = new URLRequest(link);
       __sender.method = URLRequestMethod.POST;
       __loader = new URLLoader();
       __loader.dataFormat = URLLoaderDataFormat.TEXT;
       __loader.load(__sender);
       __loader.addEventListener("ioError" ,ioErrFunc);
       __loader.addEventListener(Event.COMPLETE,completeFunc);
      }
      private function completeFunc(re:Event) {
       result=re.target.data;
       dispatchEvent(new Event(LoadVar.COMPLETE));
      }

      private function ioErrFunc(err:Event) {
       result=err.target.data;
       dispatchEvent(new Event(LoadVar.IOERROR));
      }

     }
    }

     //fla文件 
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
    System.useCodePage = true;
    var page=[0,0,0];
    txt.text="code by wxsr \n http://wxsr.blogbus.com/\n";

    import org.net.LoadVar;
    var load_:LoadVar=new LoadVar();


    var num=0;
    btn1.addEventListener(MouseEvent.CLICK,goFunc);
    btn2.addEventListener(MouseEvent.CLICK,goFunc2);
    //注册事件

    load_.addEventListener(LoadVar.COMPLETE, resultFunc);
    load_.addEventListener(LoadVar.IOERROR, resultFunc);
    load_.load("http://www.1stbook.net/sfw/nk/wai/000.html");


    function setFormat() {
     var format:TextFormat = new TextFormat();
     format.color = 0x333333;
     format.size = 15;
     txt.defaultTextFormat = format;
    }

    function setpage(num) {
     var tmp_arr=String(num).split("");
     for (var i=0; i<page.length; i++) {
      if (i>tmp_arr.length-1) {
       break;
      } else {
       page[page.length-1-i]=tmp_arr[i]
        ;
      }
     }
     var str=page.join("");
     return str;
    }

    function goFunc(event:MouseEvent) {
     num-=1;
     if (num<=0) {
      num=0;
     }
     setFormat();
     txt.appendText("\n loading.............");
     load_.addEventListener(LoadVar.COMPLETE, resultFunc);
     load_.addEventListener(LoadVar.IOERROR, resultFunc);
     trace(num,"http://www.1stbook.net/sfw/nk/wai/"+setpage(num)+".html");
     load_.load("http://www.1stbook.net/sfw/nk/wai/"+setpage(num)+".html");

    }
    function goFunc2(event:MouseEvent) {
     num++;
     if (num>=40) {
      num=40;
     }
     setFormat();
     txt.text=("\n loading.............");
     load_.addEventListener(LoadVar.COMPLETE, resultFunc);
     load_.addEventListener(LoadVar.IOERROR, resultFunc);
     trace(num,"http://www.1stbook.net/sfw/nk/wai/"+setpage(num)+".html");
     load_.load("http://www.1stbook.net/sfw/nk/wai/"+setpage(num)+".html");

    }

    function resultFunc(result:Event) {
     if (result.target.result==undefined) {
      txt.text="没有该章节!";
     } else {

      txt.text=("\n"+result.target.result);
     }
    }

     


    收藏到:Del.icio.us




发表评论

您将收到博主的回复邮件
记住我