利用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));
}
}
}
}