隨著年紀逐漸的增長,打開幾百行Code的as繼續完成變成一件比吃掉自己的頭還要困難的事情,所以身為一個專業的programer,一定要讓主要這支as精簡精簡再精簡(比如說叫同事幫你寫),所以我們邁向了物件導向的偉大旅程
甚麼是物件導向呢?簡單的我們可以找出四個定義:繼承(Inheritance) 、多載(Overloading)與重寫(Overriding) 、封裝(Encapsulation) 、資料抽象化/抽象資料型別(Data abstraction / Abstract Data Type) 看到這四個中英文交雜(我都還不太確定她是英文)的專有名詞之後,想必你也跟我一樣開始不想看下去了,所以我們把自己定下一個簡單註解,物件導向:半年後我打開上次寫的程式碼,我還想瞭解他啊!!!!!!!對,就是這股熱忱,我們可以開始做正事了
打開上次的範例檔可以發現,主要要做的事情就是,把東西丟給NPC,等NPC回來跟我靠北,接下來的30年寫Code生涯,我應該都會做重複的事情,那我就應該將這隻as做的動作寫成一支API
所以我們抓出這支as在做的事情,並自行定義一個類別,寫成另一支as
package as3.ac.net{
import flash.display.*
import flash.events.*
import flash.net.*;
public class InternetTransfer {
public var url:String;//宣告這支as的公開變數url
public var myRequest:URLRequest ;//宣告這支as的公開URLRequest
public var variables:URLVariables;//宣告這支as的公開URLVariables
private var loader:URLLoader//宣告這支as的私有URLLoader
public function InternetTransfer() {
myRequest= new URLRequest()//當新增一個自己定義的InternetTransfer即產生URLRequest
loader = new URLLoader();//當新增一個自己定義的InternetTransfer即產生URLLoader
}
public function send($Target:String,$Variables:Object,$method:String="GET"){//定義一個公開函式send提供傳送變數出去
url = $Target
myRequest.url=url
transVariables($Variables)//為了懶惰,要傳送的變數直接給Object,再透過function transVariables把她轉成給myRequest的URLVariables,就在第35行
myRequest.data = variables
myRequest.method=$method//傳送類型直接吃給這支as的method
loader.load(myRequest);
}
public function load($Target:String,$method:String="GET"){//定義一個公開函式load提供單純的接受回傳參數
url = $Target
myRequest.url=url
myRequest.method=$method
loader.load(myRequest);
}
public function addEventListener($event:*,$function:Function) {//重寫一個監聽函式
loader.addEventListener($event, $function);
}
public function removeEventListener($event:*,$function:Function) {//重寫一個移除監聽函式
loader.removeEventListener($event, $function);
}
private function transVariables($target:Object) {
variables=new URLVariables()
for (var i in $target) {
variables[i]=$target[i]
}
}
}
}
這時候再改寫一下上次寫的aspackage {
import flash.display.*
import flash.events.*
import flash.net.*;
import flash.text.*
import flash.system.System
import as3.ac.net.InternetTransfer//將剛剛寫好的API叫近來
public class netTrans extends Sprite {
public var _net:InternetTransfer//宣告一個新的自訂類別InternetTransfer
public function netTrans() {
addEventListener(Event.ADDED_TO_STAGE, addToStageHandeler)
}
private function addToStageHandeler(_e:Event) {
removeEventListener(Event.ADDED_TO_STAGE, addToStageHandeler)
preset()
}
private function preset() {
System.useCodePage=true//因Google回傳的中文編碼關係,所以須設定
_net = new InternetTransfer()//產生InternetTransfer實體
_net.send("http://www.google.com.tw/ig/api",{weather:"Taipei"})
_net.addEventListener(Event.COMPLETE, loadCompleteHandeler);//監聽收到回傳值時的Event
}
private function loadCompleteHandeler(_e:Event) {
var __xml:XML=new XML((_e.target.data))//Google回傳的值為XML
trace(__xml)//trace看看
}
}
}
當啷~~~~跟上一次一摸摸一樣樣的結果,但是我們不用再去記以後丟值給其他NPC要寫那些Code了,省下來的腦部空間又可以多記住一些星爺的經典台詞了,想起來我就覺得開心,有了拿到的XML接下來我們又可以做些色色的事情了...歐不是,是做些其他的事情了...............待續
範例檔下載
讚!這樣應該可以增加你寫下一篇的戰鬥力吧(0.5啪??)
回覆刪除期待~