AS技術日誌

在日常開發中經常會遇到一些需要記錄的技術要點與備忘,與其記在腦子裏,不如寫下來與列位仙家共享!(本帖爲長期持續更新帖

一        在構造函數中填充Vector

Vector 類的構造函數只有一種情況:Vector(length:uint = 0, fixed:Boolean = false) ,我們無法像創建Array實例一樣在創建Vector實例時指定元素,像這樣的語法是不允許的:new Vector(1, 2, 3) 或 new Vector([1, 2, 3]) 。要想在創建Vector實例時指定元素,必須使用這樣的語法:var v:Vector.<T> = new <T>[ T1, T2, T3, ... ]; 但,網友FlashYu所說的語法卻是正確的:var v:Vector.<int> = Vector.<int>([0,1,2,3,4]); 注意了,等號右邊沒有關鍵字 new。


二        如何辨別DEBUG版本的Flash Player

在Flash Player中右擊調出的菜單中存在“顯示重繪區域”選項就表示爲debug版本的Flash Player


三        如何在Google Chrome瀏覽器中使用debug版本的Flash Player

http://www.adobe.com/support/flashplayer/downloads.html下載了debug版本的Flash Player並安裝後(帶有Plugin content debugger (for Netscape-compatible browsers )字樣的那項),打開Chrome瀏覽器並在瀏覽器地址欄中輸入chrome://plugins/後將進入到Chrome瀏覽器的插件配置頁面,在此頁面中找到Adobe Flash Player一項,我們此時應該能夠看到此項包含了多個插件選項,禁用地址中帶有Google\Chrome\Application的那個插件,僅留下地址中存在Macromed\Flash的插件即可。每次發現在Chrome瀏覽器中無法調試Flash時都有必要檢查一下Chrome這個畜生是否又自動啓用了它自帶的FP插件!


四        如何在Flash Builder中用上最新版本Flash Player新增加的API

Flash Player提供的API都存放於playerglobal.swc中,因此,要想使用最新API,我們可以下載最新版本的playerglobal.swc(在http://www.adobe.com/support/flashplayer/downloads.html頁面中,每個版本的Flash Player板塊裏都有提供相應的playerglobal.swc下載),之後將其放到{Flash Builder安裝目錄}\sdks\{所用SDK版本號}\frameworks\libs\player\{flash player版本號}目錄下

比如C:\Program Files\Adobe\Adobe Flash Builder 4.6\sdks\4.6.0\frameworks\libs\player\11.5。

C:\Program Files\Adobe\Adobe Flash Builder 4.6是我Flash Builder的安裝目錄。 4.6.0是我AS/Flex項目編譯所使用的SDK版本號,11.5是我的AS/Flex項目所需求的最低版本Flash Player版本號

之後,將你下載來的playerglobal.swc文件命名爲"playerglobal.swc",多一個字少一個字都不行。最後,打開Flash Builder,找到你要開發的項目並設置該項目屬性,在項目屬性面板中打開ActionScript / Flex編譯器標籤,在右側設置項目所用的SDK版本,項目運行所需求的最低版本Flash Player版本號,以及編輯編譯器參數,指定編譯器使用最新版本playerglobal.swc中提供的API,具體語法爲-swf-version=13(13是Flash Player11.0的版本號,每加一個小數點就加一,我這裏所用的FP版本號是11.5,所以-swf-version參數值爲13+5=18)。注意,此處設置的項目屬性都不是隨意設置的,要嚴格遵循之前放置playerglobal.swc到的路徑來配置,playerglobal.swc放在..\sdks\4.6.0目錄中,設置的項目使用的Flex SDK版本就得指定爲Flex 4.6.0;playerglobal.swc放置..\player\11.5中,就得設置項目所需求最低版本FP版本號爲11.5.0……設置了前兩項而不設置-swf-version這個編譯器參數的話,編譯時不會報錯,但運行時會報錯。

對於AS及Flex項目,上訴方法是有效的。但是對於AIR項目,需要另行下載對應的AIR SDK包(下載地址:http://www.adobe.com/devnet/air/air-sdk-download.html)。下載後將其解壓到你項目所用SDK的目錄下覆蓋原先文件即可。比如,我現在開發的項目所用的Flex SDK版本爲4.6.0,那麼我就把下載得到的最新AIR SDK包解壓到C:\Program Files\Adobe\Adobe Flash Builder 4.6\sdks\4.6.0路徑下並覆蓋原先的文件即可。


五        基礎類型的默認值

AS3中的基礎類型有String、Number、int、uint、Boolean,它們的默認值分別是:

var str:String, bool:Boolean, i:int, ui:uint, num:Number;
trace(str);//null
trace(bool);//false
trace(i);//0
trace(ui);//0
trace(num);//NaN

雖然初始值不同,但是都可以用 if ( !obj ) 來進行判斷。另外,if ( !str )這種判斷還適用於str = ""(空字符串)的情況。需要注意的是,Number對象最容易出錯,一般人以爲Number對象的默認值爲0,還有人認爲給未賦過值的Number對象進行四則運算就等於對數字0進行了四則運算,但事實上,NaN進行四則運算的結果仍舊是NaN。


六        慎用as運算符

AS3中,理論上來說,Object( obj ) 和 obj as Object 這兩句都代表強制類型轉換,但是as運算符會在類型不同的情況下產生null的運算結果,看下面的實驗代碼:

var bool:Boolean = false;
var str:String = bool as String;
trace( str );//null
str = String(bool);
trace( str );//false


七        如何獲知當前Flash Player或AIR的版本號

對於Flash Player來說,最簡單的檢測辦法是在flash player區域內右擊,在調出的菜單中最下方會顯示出fp的版本號,格式類似於“About Adobe Flash Player xx.xx.xx”這樣子。

還有一種檢測方式是訪問http://www.adobe.com/software/flash/about/獲知你當前瀏覽器安裝的fp版本。

要檢測AIR版本號,你需要先確保你安裝了AIR,然後再進入到C:\Program Files\Common Files\Adobe AIR\Versions\1.0目錄下找到Adobe AIR.dll文件,右擊打開菜單,選擇“屬性”,在文件屬性窗口中選中“詳細信息”標籤頁,查看"文件版本"。這個文件版本就表示了當前你所使用的AIR運行時的版本號


八        如何查看Flash CS中提供的位於fl包下的組件源碼

進入到 {Flash Professional CS程序安裝目錄}\Common\Configuration\Component Source\ActionScript 3.0\User Interface\fl 目錄中,可以找到全部fl組件的源碼,查看源碼可以便於我們修改組件的一些默認行爲及進行拓展


九        在Flash release版中報“SecurityError: Error #2122: 安全沙箱衝突:xx.swf 不能訪問 http://www.xx.com/x.JPG。需要一個策略文件,但在加載此媒體時未設置 checkPolicyFile 標誌。”錯誤

由於Flash安全沙箱的限制,release版的.swf文件不允許加載位於不同域名下的資源(如www.iamsevent.com/1.swf這個文件不能加載到www.anywebsit.com/域名下的文件)(詳細機制請查看這篇文章)。任何僅包含數據的文件是不能被加載成功的(文本文件,XML文件,二進制數據等等),而圖片、聲音等文件可以被加載到flash.display.Loader對象中,但你會遇到以下限制:

1.訪問loader.contentLoaderInfo.content時會報“SecurityError: Error #2122”錯誤

2.使用bitmapData.draw(loader)時會報“SecurityError: Error #2122”錯誤

3.僅可以通過直接把Loader對象添加到舞臺上來看到它的外觀

那麼爲了讓我們能獲得完全的操作權限,不再報安全沙箱錯誤,我們需要做以下兩步來解決:

1.在需要加載的資源所在服務器根目錄上放置crossdomain.xml文件,該文件格式類似於

<?xml version="1.0"?>
<cross-domain-policy>
	<allow-access-from domain="*"/>
</cross-domain-policy>

每個<allow-access-from>標籤都代表一個允許遠程訪問的位置,你將它的domain值設置爲你.swf所放置的域名地址就行了,或者直接設置爲通配符(*),表示允許外部所有站點訪問它的資源。

2.設置loader.load()方法的第二個參數爲一個checkPolicyFile屬性爲true的LoaderContext對象。如下:

loader.load( new URLRequest("http://www.iamsevent.com/UPLOAD/1.JPG"), new LoaderContext(true) );

做完這兩步後這樣就不會再出現討厭的安全沙箱錯誤了


十        Flex項目中要調整組件位置太麻煩了,有什麼簡便一點的方式嗎?

藉助FlexSpy工具可以在運行時查看並編輯當前可視組件的屬性,大大簡化界面調整的工作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章