天天看點

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));

    }

   }

  }

 }