通常在創建Flash項目時,我們習慣於將所有的文件都與fla文件放在同一個路徑下,這是由於默認情況下,Flash構建swf運行時對於其他依賴文件的搜索都是從當下路徑開始。不過這不是一個科學的方法。現在是時候修改下了。
預設定:
創建一個project文件夾,用來作為項目根目錄。
在其下,用Flash Pro創建我的fla文件,一個新程序總是從這裡開始,然後在相同路徑下再創建一個src文件夾和bin文件夾,這兩個名字是參考了.NET和Java的IDE中對項目文件夾的命名:src擺放源代碼;bin用來擺放生成的執行文件。如圖:
現在需要在fla文件中做一些設定,來使用另外兩個文件夾,首先去到File->Actionscript Settings,在彈出的菜單里選Source Path,然後添加一個路徑:./src,如圖:
這樣做之後,Flash Pro在運行fla文件生成swf時,首先會在當下路徑下尋找所需要的.as文件,如果沒有找到,會繼續在/src下尋找。
現在去到File->Publish Setting,在彈出的介面里,在Output File里,輸入新的路徑:./bin/name.swf,當然這個操作也可以通過右手邊的按鈕來做,如圖:
使用:
剛剛已經在fla文件里給其指定了一個文檔類,為main。現在來創建這個main.as,創建的過程和內容都與之前的做法相同,只是在保存的時候把它保存在src路徑下,而不再是與fla同路徑,內容為:
package
{
import flash.display.MovieClip;
public class main extends MovieClip
{
public function main()
{
trace("constructing...");
}
}
}
好了,現在在Flash Pro里測試運行這個項目,在output窗口里會見到:
constructing...
同時bin路徑下出現生成的swf文件:
現在假設我們需要一個自定義的加載類,來加載放在外部XML文件中的數據,我們需要如何在這種結構下完成。
創建路徑./src/com/idsquare/vince/ikeleido/model/loader,并在這個路徑下創建一個ConfigLoader.as,其內容為一個加載XML的類。同時在bin下創建一個xml文件夾,在其中放置一個xml文件。
ConfigLoader.as:
package com.idsquare.vince.ikeleido.model.loader
{
import flash.events.EventDispatcher;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
public class ConfigLoader extends EventDispatcher
{
private var _xmlLoader:URLLoader;
public function ConfigLoader()
{
}
public function load()
{
var $req:URLRequest = new URLRequest("xml/config.xml");
this._xmlLoader = new URLLoader();
this._xmlLoader.addEventListener(Event.COMPLETE, this.confLoadedHandler);
this._xmlLoader.load($req);
}
/* handlers */
private function confLoadedHandler($e:Event):void
{
try{
var $xml:XML = new XML($e.target.data);
}
catch($er:Error){}
trace($xml.skin);
}
}
}
修改main.as為:
package
{
import flash.display.MovieClip;
import flash.events.Event;
import com.idsquare.vince.ikeleido.model.loader.ConfigLoader;
public class main extends MovieClip
{
private var _ldr:ConfigLoader = new ConfigLoader();
public function main()
{
this.addEventListener(Event.ADDED_TO_STAGE, this.addedToStageHandler);
}
/* handlers */
private function addedToStageHandler($e:Event):void
{
this._ldr.load();
}
}
}
config.xml為:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<options>
<skin>default</skin>
</options>
測試文件,output窗口輸出為default。可見,加載外部文件時(比如XML),Flash是以swf所在的路徑為當前路徑的,所以只要是相對於/bin路徑的文件,不需要做特別的修改。
使用項目工具
Flash Pro自帶一個不算很厲害的項目文件管理的功能。去到Window->Project,在彈出的project介面中,尋找到Open Project按鈕:
在彈出的瀏覽窗口里定位到剛剛創建的項目的文件夾,按照此文上面的例子,即project文件夾。然後在下面的介面中輸入相應的信息,這些信息通常要自定,默認項目名是文件夾名,所以有些時候不太適合。
因為剛剛已經創建了fla文件了,所以不需要勾選create default document。點創建之後,會發現在project文件夾下多了一些東西:
通常你不會需要那個新建立的fla文件,可以自行刪去。最終我們到達這個效果:
這樣做有何好處,因為這個介面提供基本的打開、創建、刪除等操作,所以主要是這個樹形檢視圖可以方便你操作項目內的文件,下面也有一個按鈕可以執行運行fla的動作,在不需要打開這個fla的情況下。另外的好處是創建新的類時,域名空間(或稱為包,package)會被自動加進去,不過有些地方要注意,假如要在/model/loader/包下創建一個新:
按這個按鈕之後:
在這個情況下,新的類並不是一個displayobject,它根本不需要跟庫中的某個MC關聯,所以不需要勾選圖中的Bind class to library symbol。
但是,注意,在Class那一欄,這一欄的內容是class的完整有效名,即是包括所屬的package的名字,可是默認情況下這裡總是以src開頭的,但這並不是我們希望的,可是這個時候最好不要刪掉,而是這樣點擊Create Class,然後在文件里手動刪掉package聲明的src部份。原因是,如果此時刪掉src,Flash Pro會在根目錄下為你創建com文件夾以及其子文件夾來映射這個新的類。