flash.utils 套件包含各種可用來計時程式碼執行、擷取類別和物件資訊,以及轉換反斜線字元的套件層級函數。
| 函數 | 定義自 | ||
|---|---|---|---|
會取消指定的 setInterval() 呼叫。 | flash.utils | ||
會取消指定的 setTimeout() 呼叫。 | flash.utils | ||
會產生 XML 物件,以說明命名為方法之參數的 ActionScript 物件。 | flash.utils | ||
會根據 System.useCodePage 的值,傳回編碼為 UTF-8 或系統字碼頁之輸入字串的逸出副本。 | flash.utils | ||
會傳回 name 參數所指定之類別的類別物件參照。 | flash.utils | ||
會傳回物件的完整類別名稱。 | flash.utils | ||
會傳回物件 (由 value 參數指定) 之基底類別的完整限定類別名稱。 | flash.utils | ||
用於計算相對時間。 | flash.utils | ||
依指定的間隔 (以毫秒為單位) 執行函數。 | flash.utils | ||
會在指定的延遲時間 (以毫秒為單位) 之後執行指定的函數。 | flash.utils | ||
會根據 System.useCodePage 的值,傳回透過系統字碼頁或 UTF-8 解碼之輸入字串的不逸出副本。 | flash.utils | ||
clearInterval | () | 函數 |
public function clearInterval(id:uint):void| 語言版本: | ActionScript 3.0 |
| 執行階段版本: | AIR 1.0, Flash Player 9 |
會取消指定的 setInterval() 呼叫。
參數
id:uint — setInterval() 呼叫的 ID,您要將其設定為變數,如下所示:
|
相關 API 元素
範例 ( 如何使用本範例 )
setInterval() 方法建立計時間隔,在固定的一秒鐘間隔之後呼叫 myRepeatingFunction() 方法。
每一個 myRepeatingFunction 方法呼叫都會遞增 counter 屬性,而當它等於 stopCount 屬性時,會使用 intervalId 屬性 (它是之前建立之間隔的參照 ID) 呼叫 clearInterval() 方法。
package {
import flash.display.Sprite;
import flash.utils.*;
public class ClearIntervalExample extends Sprite {
private var intervalDuration:Number = 1000; // duration between intervals, in milliseconds
private var intervalId:uint;
private var counter:uint = 0;
private var stopCount:uint = 3;
public function ClearIntervalExample() {
intervalId = setInterval(myRepeatingFunction, intervalDuration, "Hello", "World");
}
public function myRepeatingFunction():void {
trace(arguments[0] + " " + arguments[1]);
counter++;
if(counter == stopCount) {
trace("Clearing Interval");
clearInterval(intervalId);
}
}
}
}
clearTimeout | () | 函數 |
public function clearTimeout(id:uint):void| 語言版本: | ActionScript 3.0 |
| 執行階段版本: | AIR 1.0, Flash Player 9 |
會取消指定的 setTimeout() 呼叫。
參數
id:uint — setTimeout() 呼叫的 ID,您要將其設定為變數,如下所示:
|
相關 API 元素
範例 ( 如何使用本範例 )
setTimeout() 方法,在指定的延遲期間之後呼叫另一個方法。
這裡會建立迴圈以進行一百萬次的計數。 如果系統可以在少於一秒鐘的時間內處理這個要求,clearTimeout() 將會移除 setTimeout() 要求,而且將不會呼叫 myDelayedFunction()。
package {
import flash.display.Sprite;
import flash.utils.*;
public class ClearTimeoutExample extends Sprite {
private var delay:Number = 1000; // delay before calling myDelayedFunction
private var intervalId:uint;
private var count:uint = 1000000;
public function ClearTimeoutExample() {
intervalId = setTimeout(myDelayedFunction, delay);
startCounting();
}
public function startCounting():void {
var i:uint = 0;
do {
if(i == count-1) {
clearTimeout(intervalId);
trace("Your computer can count to " + count + " in less than " + delay/1000 + " seconds.");
}
i++;
} while(i < count)
}
public function myDelayedFunction():void {
trace("Time expired.");
}
}
}
describeType | () | 函數 |
public function describeType(value:*):XML| 語言版本: | ActionScript 3.0 |
| 執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會產生 XML 物件,以說明命名為方法之參數的 ActionScript 物件。 這個方法會實作 ActionScript 語言的「反射」程式設計概念。
如果 value 參數是某個類型的實體,傳回的 XML 物件便會包含該類型的所有實體屬性,但不包含任何靜態屬性。 您可以在剖析 XML 物件時,檢查 <type> 標籤的 isStatic 特質值 (當 value 為某類型的實體時,此值會是 false),以便檢查這個條件。
若要取得某類型的靜態屬性,請將該類型本身傳遞為 value 參數。 傳回的 XML 物件不只會包含該類型的靜態屬性,也會包含所有的實體屬性。 實體屬性會置於名為 <factory> 之標籤內的巢狀結構中,以便與靜態屬性有所區分。 在此情況下,<type> 標籤的 isStatic 特質會是 true。
注意:如果您只需要通過物件的繼承階層架構,而不需要 describeType() 所提供的其他資訊,請改用 getQualifiedClassName() 與 getQualifiedSuperclassName() 函數。
下表說明 describeType() 所產生 XML 物件的一些標籤和特質 (所有傳回的類別和介面名稱都是完整格式):
| 標籤 | 特質 | 說明 |
|---|---|---|
<type> | XML 物件的根標籤。 | |
| name | ActionScript 物件之資料類型的名稱。 | |
| base | ActionScript 物件之定義類別的直接父類別。 如果 ActionScript 物件是類別物件,此值便會是 Class。 | |
| isDynamic | 如果 ActionScript 物件的定義類別為動態類別,則為 true,否則為 false。 如果 ActionScript 物件是類別物件,此值會是 true,因為 Class 類別是動態類別。 | |
| isFinal | 如果 ActionScript 物件的定義類別是最終類別,則為 true,否則為 false。 | |
| isStatic | 如果 ActionScript 物件是類別物件或建構函數,則為 true,否則為 false。 這個特質名為 isStatic,因為如果其值為 true,任何不在 factory 標籤之巢狀結構內的標籤都會是靜態的。 | |
<extendsClass> | ActionScript 物件之定義類別的每個父類別,都有個別的 extendsClass 標籤。 | |
| type | ActionScript 物件之定義類別所延伸的父類別名稱。 | |
<implementsInterface> | ActionScript 物件之定義類別或其任何父類別所實作的每個介面,都有個別的 implementsInterface 標籤。 | |
| type | ActionScript 物件之定義類別所實作的介面名稱。 | |
<accessor> | 存取子是由 getter 與 setter 函數定義的屬性。 | |
| name | 存取子的名稱。 | |
| access | 屬性的存取權限。 可能的值包括 readonly、writeonly 及 readwrite。 | |
| type | 屬性的資料類型。 | |
| declaredBy | 包含相關聯之 getter 或 setter 函數的類別。 | |
<constant> | 常數是以 const 陳述式定義的屬性。 | |
| name | 常數的名稱。 | |
| type | 常數的資料類型。 | |
<方法> | 方法是宣告為類別定義之一部分的函數。 | |
| name | 方法的名稱。 | |
| declaredBy | 包含方法定義的類別。 | |
| returnType | 方法之傳回值的資料類型。 | |
<parameter> | 方法所定義的每個參數,都有個別的 parameter 標籤。 此標籤永遠都會位於 <method> 標籤內的巢狀結構中。 | |
| index | 數字,對應於參數在方法之參數清單中的出現順序。 第一個參數具有 1 這個值。 | |
| type | 參數的資料類型。 | |
| optional | 如果此參數為選擇性,則為 true,否則為 false。 | |
<variable> | 變數是以 var 陳述式定義的屬性。 | |
| name | 變數的名稱。 | |
| type | 變數的資料類型。 | |
<factory> | 如果 ActionScript 物件是類別物件或建構函數,則所有的實體屬性與方法都會以巢狀方式位於此標籤中。 如果 <type> 標籤的 isStatic 特質為 true,所有不在 <factory> 標籤之巢狀結構內的屬性與方法都會是靜態屬性。 這個標籤只會在 ActionScript 物件是類別物件或建構函數時出現。 |
參數
value:* — 需要類型說明的物件。 任何可能傳遞至此方法的 ActionScript 值,包括所有可用的 ActionScript 類型、物件實體、基本類型 (如 uint) 及類別物件。
|
XML — XML 物件,含有傳入為參數之物件的詳細資料。 此物件提供關於物件的下列資訊:
注意: |
相關 API 元素
範例 ( 如何使用本範例 )
package {
import flash.display.Sprite;
import flash.utils.describeType;
public class DescribeTypeExample extends Sprite {
public function DescribeTypeExample() {
var child:Sprite = new Sprite();
var description:XML = describeType(child);
trace(description..accessor.@name.toXMLString());
}
}
}
escapeMultiByte | () | 函數 |
public function escapeMultiByte(value:String):String| 語言版本: | ActionScript 3.0 |
| 執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會根據 System.useCodePage 的值,傳回編碼為 UTF-8 或系統字碼頁之輸入字串的逸出副本。 使用 System.useCodePage 可讓執行階段存取以本機字碼頁編碼的舊版內容,但是只能在使用該舊版字碼頁的系統上。例如,以 Shift-JIS 編碼的日文資料,將只能在使用日文預設字碼頁的作業系統上,適當地進行逸出與不逸出。
參數
value:String — 要逸出的字串。
|
String — 輸入字串的逸出副本。 如果 System.useCodePage 為 true,逸出的字串會以系統字碼頁進行編碼。 如果 System.useCodePage 為 false,逸出的字串會以 UTF-8 進行編碼。 例如,如果 System.useCodePage 為 false,則輸入字串 "Crüe" 將會在所有系統上逸出為 "Cr%C3%BCe"。 如果 system.useCodePage 為 true,並且系統使用的是拉丁字碼頁,則 "Crüe" 會逸出為 "Cr%FCe"。 如果系統使用不包含 'ü' 字母的非拉丁字碼頁,結果便可能會是 "Cr?e"。不逸出 "Cr%C3%BCe",並將 System.useCodePage 設定為 true ,便會在不同的系統上產生不良結果,例如在拉丁系統上產生 "Crüe"。 同樣地,不逸出 "Cr%FCe" 並將 System.useCodePage 設定為 false,則可能會根據系統的字碼頁,而產生 "Cre"、"Cr?e" 或其他的變化。
|
getDefinitionByName | () | 函數 |
public function getDefinitionByName(name:String):Object| 語言版本: | ActionScript 3.0 |
| 執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會傳回 name 參數所指定之類別的類別物件參照。
參數
name:String — 類別的名稱。
|
Object — 會傳回 name 參數所指定之類別的類別物件參照。
|
擲回值
ReferenceError — 具有指定之名稱的公用定義不存在。
|
範例 ( 如何使用本範例 )
GetDefinitionByNameExample 類別,在舞台上建立橘黃色方形。 這是透過下列步驟完成:
- 宣告變數,設定背景顏色為橘色以及大小為 80 像素。這些變數稍後將用於繪製正方形。
- 在此建構函式中,會將 Class 類型的變數
ClassReference指定給 Sprite。 - 會實體化名為
instance的 ClassReference 實體。 - 由於
instance依照傳址方式為 Sprite 物件,所以可以繪製一個方形,並使用可供 Sprite 使用的方法將此方形加入到顯示清單中。
package {
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.utils.getDefinitionByName;
public class GetDefinitionByNameExample extends Sprite {
private var bgColor:uint = 0xFFCC00;
private var size:uint = 80;
public function GetDefinitionByNameExample() {
var ClassReference:Class = getDefinitionByName("flash.display.Sprite") as Class;
var instance:Object = new ClassReference();
instance.graphics.beginFill(bgColor);
instance.graphics.drawRect(0, 0, size, size);
instance.graphics.endFill();
addChild(DisplayObject(instance));
}
}
}
getQualifiedClassName | () | 函數 |
getQualifiedSuperclassName | () | 函數 |
public function getQualifiedSuperclassName(value:*):String| 語言版本: | ActionScript 3.0 |
| 執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會傳回物件 (由 value 參數指定) 之基底類別的完整類別名稱。 這個函數能提供比 describeType() 更快的方式來擷取基底類別名稱,不過無法提供 describeType() 所能提供的所有資訊。
在使用此函數擷取類別的名稱之後,您就能使用 getDefinitionByName() 函數將此類別名稱轉換成類別參照。
注意:這個函數會將本身限制在實體階層架構,而 describeType() 函數則會在 value 參數是資料類型時,使用類別物件階層架構。 對資料類型呼叫 describeType(),便會傳回以類別物件階層架構為根據的父類別,其中所有的類別物件都繼承自 Class。 不過,getQualifiedSuperclassName() 函數則會忽略此類別物件階層架構,並傳回以更熟悉之實體階層架構為根據的父類別。 例如,儘管在技術上 String 類別物件會繼承自 Class,但是呼叫 getQualifiedSuperclassName(String) 還是會傳回 Object。 換句話說,不論您使用類型的實體或是該類型本身,結果都相同。
參數
value:* — 任何值。
|
String — 完整基底類別名稱,不存在基底類別時則為 null。
|
相關 API 元素
getTimer | () | 函數 |
public function getTimer():int| 語言版本: | ActionScript 3.0 |
| 執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
用於計算相對時間。對於處理 ActionScript 3.0 的 Flash 執行階段,這個方法會傳回自從 ActionScript 3.0 (AVM2) 的 Flash 執行階段虛擬機器啟動後的毫秒數。對於處理 ActionScript 2.0 的 Flash 執行階段,這個方法會傳回 Flash 執行階段開始初始化之後的毫秒數。Flash 執行階段使用兩個虛擬機器處理 ActionScript。AVM1 是用於執行 ActionScript 1.0 與 2.0 的 ActionScript 虛擬機器。AVM2 是用於執行 ActionScript 3.0 的 ActionScript 虛擬機器。AVM1 的 getTimer() 方法行為與 AVM2 的行為不同。
如需有關日曆日期 (timestamp) 的資訊,請參閱 Date 物件。
傳回值int — 自從執行階段初始化 (當處理 ActionScript 2.0 時) 後,或自從虛擬機器啟動後 (當處理 ActionScript 3.0 時) 的毫秒數。如果執行階段開始播放某個 SWF 檔,另一個 SWF 檔則在稍後載入,傳回的值便會相對於首次載入 SWF 檔時的值。
|
相關 API 元素
範例 ( 如何使用本範例 )
GetTimerExample 類別來取得及列印執行階段初始化以來所經過的毫秒數。
package {
import flash.utils.getTimer;
import flash.display.Sprite;
public class GetTimerExample extends Sprite {
public function GetTimerExample() {
var duration:uint = getTimer();
trace("duration: " + duration);
}
}
}
setInterval | () | 函數 |
public function setInterval(closure:Function, delay:Number, ... arguments):uint| 語言版本: | ActionScript 3.0 |
| 執行階段版本: | AIR 1.0, Flash Player 9 |
依指定的間隔 (以毫秒為單位) 執行函數。
與其使用 setInterval() 方法,請考慮建立具有指定之間隔的 Timer 物件,並使用 0 做為 repeatCount 參數 (如此會設定計時器重複無限次)。
如果您想要使用 clearInterval() 方法取消 setInterval() 呼叫,請務必將 setInterval() 呼叫指定成變數,以供 clearInterval() 函數稍後參考。若非呼叫 clearInterval() 函數來取消 setInterval() 呼叫,將不會對含有設定逾時結束項函數的物件進行記憶體回收處理。
參數
closure:Function — 要執行的函數名稱。 請勿包含引號或括號,也不要指定要呼叫之函數的參數。 例如,請使用 functionName,而非 functionName() 或 functionName(param)。
| |
delay:Number — 間隔,以毫秒為單位。
| |
... arguments — 選擇性的引數清單,會傳遞至結束函數。
|
uint — 計時程序的唯一數字識別碼。使用此識別碼呼叫 clearInterval() 方法即可取消程序。
|
相關 API 元素
範例 ( 如何使用本範例 )
setInterval() 方法建立計時間隔,在固定的一秒鐘間隔之後呼叫 myRepeatingFunction() 方法。
package {
import flash.display.Sprite;
import flash.utils.*;
public class SetIntervalExample extends Sprite {
private var intervalDuration:Number = 1000; // duration between intervals, in milliseconds
public function SetIntervalExample() {
var intervalId:uint = setInterval(myRepeatingFunction, intervalDuration, "Hello", "World");
}
public function myRepeatingFunction():void {
trace(arguments[0] + " " + arguments[1]);
}
}
}
setTimeout | () | 函數 |
public function setTimeout(closure:Function, delay:Number, ... arguments):uint| 語言版本: | ActionScript 3.0 |
| 執行階段版本: | AIR 1.0, Flash Player 9 |
會在指定的延遲時間 (以毫秒為單位) 之後執行指定的函數。
與其使用這個方法,請考慮建立具有指定之間隔的 Timer 物件,並使用 1 做為 repeatCount 參數 (如此會設定計時器只執行一次)。
如果您想要使用 clearTimeout() 方法取消 setTimeout() 呼叫,請務必將 setTimeout() 呼叫指定成變數,以供 clearTimeout() 函數稍後參考。若非呼叫 clearTimeout() 函數來取消 setTimeout() 呼叫,將不會對含有設定逾時結束項函數的物件進行記憶體回收處理。
參數
closure:Function — 要執行的函數名稱。 請勿包含引號或括號,也不要指定要呼叫之函數的參數。 例如,請使用 functionName,而非 functionName() 或 functionName(param)。
| |
delay:Number — 直到函數執行之前的延遲時間,以毫秒為單位。
| |
... arguments — 選擇性的引數清單,會傳遞至結束函數。
|
uint — 計時程序的唯一數字識別碼。使用此識別碼呼叫 clearTimeout() 方法即可取消程序。
|
相關 API 元素
範例 ( 如何使用本範例 )
setTimeout() 方法,在指定的延遲期間之後呼叫另一個方法。
package {
import flash.display.Sprite;
import flash.utils.*;
public class SetTimeoutExample extends Sprite {
private var delay:Number = 1000; // delay before calling myDelayedFunction
public function SetTimeoutExample() {
var intervalId:uint = setTimeout(myDelayedFunction, delay, "Hello", "World");
}
public function myDelayedFunction():void {
trace(arguments[0] + " " + arguments[1]);
}
}
}
unescapeMultiByte | () | 函數 |
public function unescapeMultiByte(value:String):String| 語言版本: | ActionScript 3.0 |
| 執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會根據 System.useCodePage 的值,傳回透過系統字碼頁或 UTF-8 解碼之輸入字串的不逸出副本。 使用 System.useCodePage 可讓執行階段存取以本機字碼頁編碼的舊版內容,但是只能在使用該舊版字碼頁的系統上。例如,以 Shift-JIS 編碼的日文資料,將只能在使用日文預設字碼頁的作業系統上,適當地進行逸出與不逸出。
參數
value:String — 不逸出的字串。
|
String — 輸入字串的不逸出副本。 如果 System.useCodePage 為 true,便會透過系統字碼頁解碼逸出的字串。 如果 System.useCodePage 為 false,便會透過 UTF-8 解碼逸出的字串。 例如,若輸入字串為 "Crüe" 且 System.useCodePage 為 false,在所有系統上的結果都會是 "Crüe"。如果 System.useCodePage 為 true,而且輸入字串是 "Cr%FCe" 且系統使用拉丁字碼頁,則結果也會是 "Crüe"。不逸出 "Cr%C3%BCe",並將 System.useCodePage 設定為 true,便會在不同的系統上產生不良結果,例如在拉丁系統上產生 "Crüe"。同樣地,不逸出 "Cr%FCe" 並將 System.useCodePage 設定為 false,則可能會根據系統的字碼頁,而產生 "Cre"、"Cr?e" 或其他的變化。
|
Tue Jun 12 2018, 04:03 PM Z