天天看點

AS3和Flex常用知識100條

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

在Navigator窗框裡右鍵你的項目

在"Navigator"窗框裡右鍵你的項目>選中"Properties">選中"ActionScript Compiler">在"Additional compiler arguments"裡輸入你所需要的指令

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

【滑鼠坐标】

mouseX mouseY

【檢查變量類型并傳回布爾值】

is

【檢查變量類型并傳回類型】

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

版權聲明:本文為CSDN部落客「weixin_34037173」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_34037173/article/details/91883886