AS3和Flex經常使用知識100條

【改變輸出swf的尺度,背景顏色或幀頻】 算法

在Navigator窗框裏右鍵你的項目 數組

在"Navigator"窗框裏右鍵你的項目>選中"Properties">選中"ActionScript Compiler">在"Additional compiler arguments"裏輸入你所須要的命令 瀏覽器

如想改變背景顏色,請輸入: -default-background-color 0xffffff 緩存

【鼠標座標】 安全

mouseX mouseY dom

【檢查變量類型並返回布爾值】編輯器

is ide

【檢查變量類型並返回類型】 函數

typeof 測試

【檢查對象類型並返回該對象】

as

【是數字但不是有效數字問題】

var quantity:Number = 15 - "rabbits";

trace(typeof quantity); //顯示: "number" , 但它是NaN (not a number)

trace(quantity is Number); //true

trace(quantity != NaN); //false

//使用isNaN()函數檢測:

isNaN(quantity); //true

//檢測變量是否內含有效數字:

!isNaN(quantity); //false

【取消默認的嚴格編譯模式】

在"Navigator"窗框裏右鍵你的項目>選中"Properties">選中"ActionScript Compiler">取消"Enabel compile-time type checking"選項

【基元數據類型和複雜數據類型比如"值類型"和"引用類型"】

基元數據類型相似按值傳遞:

var intOne:int = 1;

var intTwo:int = 1;

trace(intOne == intTwo); //true

【複雜數據類型相似按引用傳遞】

var arrayOne:Array = new Array("a", "b");

var arrayTwo:Array = arrayOne;

trace(arrayOne == arrayTwo); //true

//-----------------------------------

var arrayOne:Array = new Array("a", "b");

var arrayTwo:Array = new Array("a", "b");

trace(arrayOne == arrayTwo); //false

【優化邏輯AND(&&)和OR(||)的小知識】

對於邏輯And(&&):

     除非條件表達式的前半部分爲真,不然,ActionScript不會再去求算邏輯AND運算符的後半部.若是前半部爲假,整個條件表達式必定爲假,因此再去求算後半部就沒效率了.

對於邏輯OR(||):

     除非條件表達式前半部爲假,不然,ActionScript不會再去求算邏輯OR運算符的後半部,若是前半部爲真,整個條件表達式必定爲真.

總結:使用邏輯AND(&&)時,把結果最可能爲false的表達式放到前面;使用邏輯OR(||)時,把結果最可能爲true的表達式放到前面.

爲了理解,我補充一例子,AND的狀況: a!=null && a.length>0 ; OR的狀況: a==null || a.length==0 //a 的空, 相對於a.length長度是否爲0可能性比較大。

【Timer類注意事項】

不要認爲Timer能夠極其準確;使用Timer時間間隔不要低於10毫秒.

【private,protected,internal,public訪問權限】

private:只能在類自己內部訪問,按慣例,命名私有成員時如下劃線"_"開頭;

protected:能夠由類自己或任何子類訪問.但這是以實例爲基礎的.換言之,類實例能夠訪問本身的保護成員或者父類的保護成員,但不能訪問相同類的其它實例的保護成員,按慣例,命名保護成員時如下劃線"_"開頭;

internal:能夠由類自己或者相同包內的任何類訪問;

public:能夠在類內部訪問,也能夠由類實例訪問,或者聲明爲static時,能夠直接從類訪問.

【一個函數具備未知個數的參數,用arguments對象或"...(rest)"符號訪問它的參數】

注意:使用"...(rest)"參數會使 arguments 對象不可用;

private funciton average():void{

     trace(arguments.length); //輸出參數的個數

     // arguments的類型是:object,但能夠像訪問數組同樣去訪問它

     trace(arguments[1]); //輸出第二個參數

}

private function average(...argu):void{

     trace(argu[1]); //輸出第二個參數,argu參數名是自定義的.

}

【錯誤處理try,catch,finally】

private function tryError():void{

     try {

         trace("測試開始-try");

         throwError();

     }catch(errObject:Error) {

         trace("錯誤信息:" + errObject.message);

         trace("測試結束-catch");

         return;

     }finally{

         trace("雖然catch裏已經有return方法,但位於return方法後面的finally裏的代碼依然會被執行.其實不管return方法是在try裏,仍是catch裏,finally裏的代碼始終會被執行");

     }

     trace("前面已經有return了,此處是不會再執行的.除非沒有拋出錯誤,以使catch裏的代碼沒有被執行");

}

private function throwError():void{

     throw new Error("拋出錯誤");

}

【for...in與for each...in的區別】

與for...in循環不一樣的是,for each...in循環中的迭代變量包含屬性所保存的值,而不包含屬性的名稱(或主鍵,索引).

爲了理解,我補充一例子:

for...in: for (var name:String in user) trace(name+": "+user[name]+"; ") //username: ryan; password: 123; 這個循環中的name是user中的每個屬性名。

for each...in: for each(var user:User in users) trace(user+": "+user.username+"; ") //user: ryan; user: bill; user: tom;

【命名包路徑的小技巧】

     使用相應於擁有者和相關項目的包名稱會比較好.按慣例來說,包名稱的開頭應該是逆向的網址名稱.例如,若是Example Corp(examplecorp.com)寫了一些ActionScript3.0類,就會把全部類放在com.examplecorp包內(或者 com.examplecorp的子包內).如此一來,若是英國有另外一家Example Corp(examplecorp.co.uk)也寫了一些ActionScript3.0類,只要使用包uk.co.examplecorp,就可確保惟一性.

     當類屬於特定應用程序的一部分時,就應該放在該應用程序特定的子包內.例如,Example Corp可能有個應用程序名叫WidgetStore.若是WidgetStore應用程序使用一個名爲ApplicationManager的類,則此類就應該放在com.examplecorp.widgetstore包內,或者位於該包的子包內. 按慣例來講,包名稱的開頭是小寫字母.

【隱式的取出方法(getter)和設定方法(setter)】

public function get count():uint {

     return _count;

}

public function set count(value:uint):uint {

     if(value < 100){

         _count = value;

     }else {

         throw Error();

     }

}

【確保類是毫不會有子類,使用final】

final public class Example{}

【super關鍵字的使用】

super(); //父類的構造函數,只能在類實例構造函數內部使用

super.propertyName; //調用父類的屬性,屬性須要聲明爲public或protected

super.methodName(); //調用父類的方法,方法須要聲明爲public或protected

【創建常數,使用關鍵字const而不是var】

static public const EXAMPLE:String = "example";

【檢測播放器版本】

flash.system.Capabilities.version

對於8.5版之前的任何Flash Player版本,這種方法都不適用.

【判斷客戶端系統】

flash.system.Capabilities.os

【檢測播放器類型】

flash.system.Capabilities.playerType

可能的值有:

"StandAlone",用於獨立的 Flash Player

"External",用於外部的 Flash Player 或處於測試模式下

"PlugIn",用於 Flash Player 瀏覽器插件

"ActiveX",用於 Microsoft Internet Explorer 使用的 Flash Player ActiveX 控件

【檢測系統語言】

flash.system.Capabilities.language

【判斷用戶是否啓用了IME(輸入法編輯器)】

flash.system.IME.enabled

【檢測屏幕的分辨率】

flash.system.Capabilities.screenResolutionX

flash.system.Capabilities.screenResolutionY

【把彈出窗口居中的算法】

X = (舞臺寬/2)-(窗口寬/2)

Y = (舞臺高/2)-(窗口高/2)

【控制影片配合Player的方式,包括縮放問題】

stage.scaleMode

可供選擇值:flash.display.StageScaleMode

【舞臺的對齊方式】

stage.align

可供選擇值:flash.display.StageAlign

【隱藏Flash Player的右鍵菜單

stage.showDefaultContextMenu = false;

【檢測系統是否具備音頻功能】

flash.system.Capabilities.hasAudio

【檢測播放器是在具備MP3解碼器的系統上運行,仍是在沒有MP3解碼器的系統上運行】

flash.system.Capabilities.hasMP3

【檢測播放器能 (true) 仍是不能 (false) 播放流式視頻】

flash.system.Capabilities.hasStreamingVideo

【檢測播放器是在支持 (true) 嵌入視頻的系統上運行,仍是在不支持 (false) 嵌入視頻的系統上運行】

flash.system.Capabilities.hasEmbeddedVideo

【檢測播放器能 (true) 仍是不能 (false) 對視頻流(如來自 Web 攝像頭的視頻流)進行編碼】

flash.system.Capabilities.hasVideoEncoder

【顯示 Flash Player 中的"安全設置"面板】

flash.system.Security.showSettings();

可供選擇項:flash.system.SecurityPanel

【讓其它域的.swf訪問本域的.swf】

在本域的.swf文件里加上:flash.system.Security.allowDomain()

或 者使用安全策略文件"crossdomain.xml".在Flash 8之前,這個文件必須放在.swf所在域的根目錄,如今,你可使用flash.system.Security.loadPolicyFile(),指定安全策略文件所在的位置.拒絕任何域的作法是在<cross-domain-policy>標籤內什麼也不填,安全策略文件也支持通用字符 "*":

<?xml version="1.0"?>

<!-- http://www.mydomain.com/crossdomain.xml -->

<cross-domain-policy>

     <allow-access-from domain="www.google.com" />

     <allow-access-from domain="*.google.com" />

     <allow-access-from domain="210.32.186.12" />

     <allow-access-from domain="*" />

</cross-domain-policy>

【數字的不一樣進制之間的轉換】

parseInt(str:String, radix:uint = 0):Number 返回十進制的數,參數radix表示要分析的數字的基數.若是省略radix,就默認爲10,除非字符串的開頭是"0x","0X"或"0":

trace(parseInt("0x12")); //設定radix爲16,輸出:18

trace(parseInt("017")); //設定radix爲8,輸出:15

或者使用Number,uint和int對象的toString(radix)方法.

【使用Math.round()對一個數取整,四捨五入】

Math.round()

trace(Math.round(204.499)); //輸出:204

trace(Math.round(401.5)); //輸出:402

【使用Math.floor()對一個數向下取整,就是隻要整數部分而不理會小數分】

trace(Math.floor(204.99)); //輸出:204

【使用Math.ceil()對一個數向上取整,只要小數部分不爲零,整數部分就加1】

trace(Math.ceil(401.01)); //輸出:402

【產生一個隨機數】

使用Math.random()產生一個僞隨機數n,其中 0 <= n < 1

【把數字取至最近的小數點位,即指定精確度】

1. 決定你要取的數字的小數點位數:例如,若是你想把90.337取成90.34,就表示你要取到兩位小數點位,也就是說你想取至最近的0.01;

2. 讓輸入值除以步驟1所選的數字(此例爲0.01);

3. 使用Math.round()把步驟2所計得的值取成最近的整數;

4. 把步驟3所得的結果乘以步驟2用於除法的那個值.

例如,要把90.337取成兩個小數點位數,可使用:

trace(Math.round(90.337/0.01)*0.01); //輸出:90.34

【把數字取成一個整數的最接近倍數值】

例1,這樣會把92.5取成5的最近倍數值:

trace(Math.round(92.5/5)*5); //輸出:95

例2,這樣會把92.5取成10的最近倍數值:

trace(Math.round(92.5/10)*10); //輸出:90

【在指定數值範圍內得到隨機數】

//可取範圍:[min, max]

private function randRange(min:Number, max:Number):Number {

     var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;

     return randomNum;

}

應用例子:

模擬投銀幣,即但願獲得隨機布爾值(true 或 false): randRange(0, 1);

模擬投骰子,即但願獲得隨機六個值: randRange(1, 6);

爲避免被緩存而須要產生一個獨一無二的數字追加在URL尾端,一般最佳方法是取得當前毫秒數.

【弧度(radian)與度數(degree)之間的轉換】

從弧度轉爲度數: degrees = radians * 180 / Math.PI

從度數轉爲弧度: radians = degrees * Math.PI / 180

【計算兩點之間的距離】

勾股定理: c2 = a2 + b2ler

假設有兩個影片剪輯mc1和mc2,則它們兩點間的距離c爲:

var c:Number = Math.sqrt(Math.pow(mc1.x - mc2.x, 2) + Math.pow(mc1.y - mc2.y, 2));

【模擬圓周運動】

已知圓心o(x0, y0),半徑r和弧度angle,求圓上任意一點P(x, y)的座標:

x = x0 + (Math.cos(angle) * r);

y = y0 + (Math.sin(angle) * r);

注意:舞臺的x軸正方向水平向右,y軸正方向垂直向下.

【模擬橢圓運動】

已知圓心o(x0, y0),長軸a,短軸b以及弧度angle,求圓上任意一點P(x, y)的座標:

x = x0 + (Math.cos(angle) * a);

y = y0 + (Math.sin(angle) * b);

【華氏溫度和攝氏溫度之間的轉換】

華氏溫度 = 攝氏度數 * 9 / 5 + 32

攝氏溫度 = (華氏度數 - 32) * 5 /9

【公斤與磅之間的轉換】

公斤 = 磅 * 2.2

磅 = 公斤 / 2.2

【向數組尾端添加元素】

var array:Array = new Array();

array.push("a", "b");

//向數組尾端添加單一元素也能夠這樣:

array[array.length] = "c";

//若是以索引設定的元素不存在,數組自己會自動擴展以包含足夠的元素數目.介於中間的元素會被設爲undefined:

array[5] = "e";

trace(array[4]); //輸出: undefined

轉載:http://tieba.baidu.com/f?kz=569403190

相關文章
相關標籤/搜索