【改變輸出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