AS3 基础知识

利用FlashDevelop 4.0.1 RTM版本在安装的时候就直接下载相关的flex sdk, flashPlayerDebugger, flashAIRSDK,简单方便。

1:addChild相当于2.0里面把库中的元件载入到场景中,用了addChild后我们画的那个圆就显示在场景中了,与之对应的是removeChild,是从场景中删除
2:库中的元件与类的链接?
   我猜,元件就好比是类的实例,给元件取名,是为了方便我们程序来引用。
3:文档类?
   文档类就相当于第一帧的位置,这样我们就不用在FLA文件里写代码了,所有代码都写在AS文件里,达到了界面和代码的分离。
4:利用反射方式来加载元件,主要是利用 getDefinitionByName(元件名称:string)
    for(var i=1;i<=2;i++)
    {
 var ClassReference:Class = getDefinitionByName("Mc"+i) as Class;
 var instance:MovieClip = new ClassReference();
 addChild(instance);
    }
5: 事件监听方式:在as3.0中,一律用addEventListener
   _btn.addEventListener(MouseEvent.CLICK,btnClickHandler);
   function btnClickHandler(event:MouseEvent): void
   {
 //点击后代码
   }
   经常有些侦听我们用过一次后可以就不会再用了,那么为了节省资源,我们要将这些侦听删除掉,要侦除侦听这们用这样的方法:
   _btn.removeEventListener(MouseEvent.CLICK,insClickHandler);//删除侦听

6:消息机制(类与类之前也是可以侦听的),dispatchEvent就是用来发送消息的。如果我们写的这个类不继承Sprite是不能用的,凡是从EventDispatcher继承下来的类就可以使用这个方法.
 package net.smilecn
 {
  import flash.display.Sprite;
  import flash.events.Event;
  import flash.events.MouseEvent;
  public class MyClass extends Sprite
  {
   public function MyClass()
   {
    addEventListener(MouseEvent.CLICK,clickHnadler);
   }
   private function clickHnadler(event:MouseEvent):void
   {
    dispatchEvent(new Event(Event.CLOSE)); //发送Event.CLOSE消息
   }
  }
 }
 将库中的一个MC链接到MyClass这个类上(方法参数前面章节)再修改之前的文档类:
 package net.smilecn
 {
  import flash.display.Sprite;
  import flash.events.Event;
  import net.smilecn.MyClass;
  public class MainForm extends Sprite
  {
   private var myClass:MyClass;
   public function MainForm()
   {
    myClass = new MyClass();
    addChild(myClass);
    myClass.addEventListener(Event.CLOSE,closeHandler); //侦听Event.CLOSE消息,一旦接受,closeHandler触发
   }
   private function closeHandler(event:Event):void
   {
    trace("你收到了myClass的消息");
   }
  }
 }
  
 FLASH的EVENT类里面自带的CLOSE事件,其实就是个字符串,我们也可以自己定义字符串,比如这样:
 dispatchEvent(new Event(“message”));
 myClass.addEventListener("message",closeHandler);

7:事件传递参数
 在as3.0版本中,发消息的时候传参数,要去写一个类去继承Event这个类,
 package net.smilecn
 {
  import flash.events.Event;
  public class MyEvent extends Event
  {
   private var _object:Object;
   public function MyEvent(type:String,object:Object):void
   {
    super(type);
    _object=object;
   }
   
   public function get param():Object
   {
    return _object;
   }
  }
 }
 类继承了Event这个类,在构造方法里有一个super(type),super的意思是执行父类的构造方法,也就是执行Event的构造,
 type是消息的类型,就是消息的名字,一个字符串,object就是我们要传的参数要用到的一个变量,是一个对象,我们知道
 对象是很方便的,可以存储1到多个参数,下面是一个GET方法,通过param这个名字去取_object这个对像的值。

 怎么用这个MyEvent类?
 package net.smilecn
 {
  import flash.display.Sprite;
  import flash.events.MouseEvent;
  import net.smilecn.MyEvent;
  public class MyClass extends Sprite
  {
   public function MyClass()
   {
    addEventListener(MouseEvent.CLICK,clickHnadler);
   }
   
   private function clickHnadler(event:MouseEvent):void
   {
    //{a:100,b:200},这个参数就是我们传进去的对象,这个对象有两个属性值,
    //一个叫a,值为100,一个叫b,值为200;
    dispatchEvent(new MyEvent("myClassMessage",{a:100,b:200}));
   }
  }
 }
8:MVC模式
 MVC模式是‖Model-View-Controller‖的缩写,中文翻译为‖模式-视图-控制器‖。MVC应用程序总是由这三个部分组成。
 Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有
 依赖的View都会自动更新。 MVC模式能使界面(Viwe)和数据(Model)能有效的分开,由控制器(Controller)去控制。

 Model按照我的理解是数据,就是所有的共用数据都是存储在Model里面的

9:Loader加载类:
 Loader 类可用于加载 SWF 文件或图像(JPG、PNG 或 GIF)文件
 //Main.fla文件的文档类,导出 Main.swf 文件
 package net.smilecn.studyLoader
 {
  import flash.display.Sprite;
  public class MainForm extends Sprite
  {
   public function MainForm():void
   {
   }
   public function getMainParam(param:String)
   {
    trace("得到从外层来的参数:",param);
   }
  }
 }

 //sub.fla文件的文档类,载入Main.fla的导出文件
 import flash.display.Loader;
 import flash.net.URLRequest;
 import flash.events.Event;
 import flash.events.ProgressEvent;

 private var subLoader:Loader;

 subLoader = new Loader();
 subLoader.load(new URLRequest("Main.swf"));
 subLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
 subLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);

 private function completeHandler(event:Event):void
 {
  trace("文件已经加载完成");
  addChild(subLoader);
  event.currentTarget.content.getMainParam("你好"); //event.currentTarget.content实际上就是加载进来的那个SWF(Main.swf)
 }

10:URLLoader与后台交互[举例:可以实现配置文件的读取]
 package net.smilecn.studyURLLoader
 {
  import flash.display.Sprite;
  import flash.net.URLLoader;
  import flash.net.URLRequest;
  import flash.events.Event;
  public class MainForm extends Sprite
  {
   public function MainForm():void
   {
    var loader:URLLoader = new URLLoader();
    loader.load(new URLRequest("cfg.txt")); //3: cfg.xml
    loader.addEventListener(Event.COMPLETE,loadCompleteHandler);
   }
   
   private function loadCompleteHandler(event:Event):void
   {
    //1:原样读取文本信息
    trace(event.currentTarget.data); //读取cfg.txt文件的内容
    //2:以URL格式读取参数信息。cfg.txt信息: msg=hello!&ip=localhost
    var vars:URLVariables = new URLVariables(event.currentTarget.data);
    trace(vars.msg);
    trace(vars.ip);
    //3: XML方式读取:cfg.xml信息:<?xml version="1.0" encoding="UTF-8"?> <root> <msg>hello!</msg> <ip>localhost</ip> </root>
    var vars:XML = new XML(event.currentTarget.data);
    trace(vars.msg);
    trace(vars.ip);

   }
  }
 }

11: 共享资源库
 前面我们介绍了载入文件,我们经常要加载的可能就是SWF文件了,我们在实际使用中还会把SWF文件作为共享资源库,就是把一些
 元件放到一个SWF文件里,这样只要加载它的文件都可以使用它的库里面的元件,这样做的好处在于我们可以使主文件更小一点,
 当多个文件使用相同的元件时,就可以共用了。

 1:先建一个FLA文件,在库里面建几个元件,这里我们建一个MC,一个Button,然后导出,MC我们起名叫MyMc,Button我们起名叫MyBtn,
 FLA文件叫library,发布生成一个library.swf文件。
 
 2:再来建立主文件,建一个FLA文件,起名叫:loadLibrary,再来建立一个文档类MainForm.as:

 package net.smilecn.loadLibrary
 {
  import flash.display.Sprite;
  import flash.display.MovieClip;
  import flash.display.SimpleButton;
  import flash.display.Loader;
  import flash.net.URLRequest;
  import flash.events.Event;
  
  public class MainForm extends Sprite
  {
   private var loader:Loader;
   private var myMc:MovieClip;
   private var myBtn:SimpleButton;
   public function MainForm()
   {
    loader = new Loader();
    loader.load(new URLRequest("library.swf"));
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
    
    public function completeHandler(event:Event)
    {
     myMc = getLibMc("MyMc");
     addChild(myMc);
     myBtn = getLibBtn("MyBtn");
     addChild(myBtn);
     myBtn.x=100;
     myBtn.y=100;
    }
    
    public function getLibMc(name:String):MovieClip
    {
     var classReference = (loader.contentLoaderInfo.applicationDomain.getDefinition(name) as Class);
     return ((new (classReference) as MovieClip));
    }
    
    public function getLibBtn(name:String):SimpleButton
    {
     var classReference = (loader.contentLoaderInfo.applicationDomain.getDefinition(name) as Class);
     return ((new (classReference) as SimpleButton));
    }
   }
  }
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值