2010年4月18日 星期日

AS3 撰寫外部as檔 從零開始 之 2 as檔案的結構 package 關鍵字

延續上一章節的範例
現在我們已經知道怎麼把寫再影格中的as程式碼寫到外部的as檔案中,並且再輸出時引用它
這個章節我們針對as檔案的內容架構作說明

我們先來看一下as檔案範例內容


package 
{
        import flash.display.MovieClip;
        public Main class extends MovieClip   
       {
             public function Main()
             {                    
                      stop();
             }
       }
}


為了方便辨識,我用不同顏色把區塊標示出來
你會發現,實際上我們需要撰寫在這個影格上as程式程式只有藍色的stop()指令而已
不過我們再撰寫外部as檔案時,卻要多寫一大堆架構性質的框架,而且這些框架有著嚴格的規定,如果沒有依照規定來撰寫,程式將會產生錯誤..


感覺似乎相當複雜,其實你只要瞭解框架中每個語法的意義,其實是相當容易理解它的
以下阿Cain老師將對框架的內容一一位各位作說明

首先看最外部的紅色字內容


package 
{
impo......(裡面先不管他,之後再說明)
}


package(包裹),外加一組大括號
as檔案中的所有程式碼必須都包覆在這個大括號裡面,你可以把它像成一個程式包,我們把所有的程式都寫在裡面,這部分應該不難理解(別問我為什麼要包,因為這是規定)


如果你有開過別人寫的as檔案,你還會看到以下的語法


package cain 
{
...一堆看不懂的程式碼
}


你會注意到package的關鍵字後面多了一個cain....(或是其他的辭彙)
一般來說我們的as檔案會跟你的fla檔案放在同一層的目錄下面,flash才能正常對應到它
但是有時候,一個專案往往會讓你撰寫非常多的as檔案,這時候如果沒有好好的作整理,整個專案目錄的資料內容將會相當混亂...

最好的方法應該是將眾多的as檔案,分門別類放到不同的資料夾裡面,方便以後作整理,但是現在問題來了,當我們開個新的目錄,把as檔放進去並輸出時,你會發現你的fla已經對應不到as程式了,其原因就是 package { } 其實就是指定程式包裹的路徑,package後面有沒有加東西直接加{}代表著放在與fla同一層目錄裡...

寫到這裡我想你應該知道那如果寫成以下代表著麼意義了吧!

package cain 
{
...一堆看不懂的程式碼
}

package後面的cain代表,代表這支as檔案將放在cain這個目錄裡面


再舉個例子,如果寫成以下


package cain.myaction
{
...一堆看不懂的程式碼
}

package後面的多了 cain.myaction , 這並不是放在cain.myaction這個目錄裡面的意思," . "這個符號再as3裡面有著相當重要的地位,這點之後你會瞭解...
cain.myaction代表著這支as程式碼是放在 cain 目錄裡的 myaction 目錄裡面,如果這支程式名子叫做Main.as,那它的位置應該是在 cain/myaction/Main.as 才對


瞭解了以上用法package,你應該可以把你的as檔案放在你想放的任意位置了

好了!當你相當高興的把你的as檔案放在你想放的目錄裡面,as檔案中的package關鍵字後面也加上了正確的路徑名稱,輸出後你卻發現你的程式抓不到你的as檔案了,這是什麼原因呢?

依照上一章節的說明你的fla主場景程式的類別欄位設定可能還是這樣(假定檔名是Main.as)


不過因為你的Main.as已經移到別的地方了(我們假設它移到了cain目錄下面),所以你的fla變成找不到這支as檔案了...
解決的方法就是,在你的Main前面也加上路徑 cain.Main




這樣你的fla檔案才能正確對應到的as檔,當然你還是可以按下欄位右邊的筆型按鈕來驗證是否有對應到你的as檔案


如果你的程式放在package cain.myaction {} , 類別欄位就是填上cain.myaction.Main 就行了fla輸出時會自動去 cain/myaction/Main.as 這個地方找檔案

以下一些地方還是要提醒你
1.注意大小寫cain跟Cain不同...main跟Main不同
2.as檔案的路徑絕對都是相對於你的fla檔案,請不要將你的fla檔案隨便亂放

另外再釐清一個觀念
當你把你的fla檔案正確輸出成swf時,你會很清楚你只要把swf上傳倒主機裡就行了,但是sa檔案需要傳上去嗎?
其實你的swf就是fla+as檔案,所以你上傳了swf等於是你傳了fla+as檔案,所以你的as檔案不需要再上傳一次
另一點很重要的,也是有很多初學者常常忽略的....如果你的as檔案有修改任何東西,請你的fla也要再輸出一次,這樣你修改後的as檔案才算是有正確崁入你的swf檔案

範例下載

沒有留言: