跳轉到內容

ActionScript 程式設計/第一部分/第一章/第二頁

來自華夏公益教科書,開放的書籍,為開放的世界

XMouse, YMouse

[編輯 | 編輯原始碼]

假設你有一個按鈕,使用者點選它。你想獲取滑鼠的位置。這個屬性將幫助你獲取滑鼠的座標。

步驟 1

建立一個按鈕(透過自己繪製或從公共庫中獲取),並將其名稱設定為“button1”。

步驟 2

從工具箱中選擇文字工具並繪製它。然後選擇它,在屬性視窗中將其寬度設定為 100,高度設定為 20,字型大小設定為 20,Var 設定為“info”,並將文字型別更改為“動態文字”。文字型別有 3 種

  • 靜態文字 - 如果你不希望文字的值發生改變,請選擇這種文字型別。例如,如果你只是想在文字中輸入“hello”,並且你不希望“hello”在執行時發生改變,那麼你就使用“靜態文字”。這對於一般的文字來說很好。
  • 動態文字 - 這種文字可以在執行時的任何時間改變。如果你想寫入當前程序的資訊,這種文字非常有用。
  • 輸入文字 - 這是一個文字欄位,幾乎與“動態文字”相同。這兩種型別唯一的區別是“輸入文字”文字可以由使用者改變,而“動態文字”完全無法改變。

因此,我們在示例中使用“動態文字”型別來檢視 xmouse 和 ymouse 的值。“Var”屬性是文字的值。例如,如果你有一個“輸入文字”,它的“Var”屬性設定為“zzz”,並且想要檢索它的值,那麼你可以從“zzz”中獲取它。我的意思是文字框的值儲存在“zzz”中。但是,透過使用“Var”,在本例中是“zzz”,你也可以改變文字的值”。例如,如果你寫

 zzz = "hello";

那麼文字的值將變為“hello”;

步驟 3

右鍵單擊你建立的按鈕,從彈出選單中選擇“動作”以開啟按鈕的動作。確保“高階模式”已開啟,並寫入以下內容

 on (release) {
    info = "x: " + button1._xmouse + "; y: " + button1._ymouse;
 }

第一行和第三行是“釋放”事件的開始和結束(在“可見”屬性中討論)。第二行使用“_xmouse”和“_ymouse”屬性將我們的動態文字的值設定為滑鼠座標。因此,當單擊按鈕時,你將在動態文字中看到滑鼠的座標。但空點是物件的中心。因此,如果你單擊按鈕的左側,x 座標將小於 0,如果你單擊物件的右側,那麼 x 座標將大於 0。

CurrentFrame

[編輯 | 編輯原始碼]

此屬性告訴你在當前的影片剪輯中,現在正在播放哪一幀。我寫的是影片剪輯而不是物件,因為此屬性僅適用於影片剪輯。這一次,我們將建立一個更復雜的示例。

步驟 1

在工具箱中選擇矩形工具,繪製一個矩形,雙擊它,然後按 F8 將其轉換為符號。當“轉換為符號”對話框出現時,將其名稱設定為“g_box”,行為設定為“圖形”。

步驟 2

按 F11 檢視庫視窗,然後單擊“建立新符號”。當“建立新符號”對話框出現時,將其名稱設定為“m_box”,行為設定為“影片剪輯”,然後按“確定”。當你在“m_box”中時,從庫中新增“g_box”圖形。然後右鍵單擊時間軸視窗中的第 32 幀,選擇“插入關鍵幀”。現在單擊 1 到 32 之間的任何幀,在屬性視窗中,從“補間”組合框中選擇“動作”。然後在“旋轉”組合框中選擇“CW”(順時針),在“旋轉計數”欄位中鍵入 1。這將使盒子順時針旋轉 1 次。

步驟 3

現在轉到“場景 1”,從工具箱中選擇文字工具。繪製一個文字,將其寬度設定為 40,高度設定為 20,字型大小設定為 20,Var 設定為“info”,並將文字型別更改為“動態文字”。

步驟 4

現在右鍵單擊我們的盒子,選擇“動作”。當“動作”窗口出現時,確保“高階模式”已開啟,併為影片剪輯 m_box 鍵入以下內容

 onClipEvent (enterFrame) {
    _root.info.text = _currentframe;
 }

現在讓我們理解一下程式碼。單詞“onClipEvent”是一個事件處理程式,就像“on”一樣。單詞“enterFrame”是事件。如果我們在之前的按鈕示例中使用“on (event) {””,那麼對於影片剪輯,我們使用“onClipEvent(event) {”。現在讓我們討論第二行。“_root”是 Flash 中的主要物件。想象一下這樣的場景:你坐在汽車裡,汽車在車庫裡,車庫在建築物裡,建築物在城市裡。正如你所看到的,所有這些的首領當然就是城市,建築物是次級首領,等等。這意味著如果你想看到建築物,你必須先走出汽車,然後走出車庫,然後走出建築物,只有這樣你才能看到它。因此,如果我們用程式設計方式描述你的位置,那麼它將是“_root.building.garage.car.you”,其中 _root 是城市。在我們的示例中,我們在“onClipEvent (enterFrame) ”事件中,所以如果我們要訪問 var info,那麼我們必須透過“_root”訪問它,這意味著“_root.info”。現在你問為什麼我們要寫“_currentframe”而不寫任何東西。因為我們已經在影片剪輯中了。例如,如果你坐在汽車裡,你需要從汽車裡取鑰匙。你不會走出汽車,然後再進入汽車去取鑰匙,你只會簡單地取鑰匙,然後走出汽車。所以這就是為什麼在我們的示例中,我們使用“_currentframe”而不寫任何東西。但是,如果你想透過“_root”訪問它,那麼你將寫“_root.box._currentframe”。

步驟 5

現在測試影片,你將看到結果。

TotalFrames

[編輯 | 編輯原始碼]

_totalframes 屬性只是告訴你影片剪輯中有多少幀。為了測試它,我們將使用之前的示例。右鍵單擊場景 1 中時間軸視窗中的關鍵幀,選擇“動作”。然後在指令碼窗格中寫入以下內容

 trace(box._totalframes);

Trace 用於記錄程式設計註釋或在測試影片時在輸出視窗中顯示訊息。trace 的使用方式如下“trace(expression);”。例如,如果你寫“trace ("hello!!!");””,那麼“hello!!!”將顯示在輸出視窗中。但是,此操作僅在 Macromedia Flash MX 中有效。我的意思是,如果你釋出了你的影片,使用者將看不到輸出視窗。因此,只在你自己測試影片時使用它。現在讓我們回到我們的示例。此程式碼將幀數寫入輸出視窗,它將是 32。

_url 屬性從下載影片剪輯的 SWF 檔案中檢索 SWF 檔案的 URL。與之前的屬性一樣,新增“trace(box._url)””,你將看到 SWF 檔案的路徑。

這會返回影片剪輯的目標路徑。這幾乎是我們之前在“TotalFrames”中討論的內容。例如,正如我們之前提到的,如果我們在汽車中,我們的目標將是“\building\garage\car”。或者另一個例子:如果你建立一個影片剪輯並將其命名為“m1”,然後建立另一個影片剪輯並將之前的影片剪輯放在其中,並將其命名為“m2”,那麼如果在“m1”的動作中寫入

 onClipEvent (enterFrame) {
    trace(_target);
 }

那麼返回路徑將是“\m2\m1”

DropTarget

[編輯 | 編輯原始碼]

稍後討論。

FocusRect

[編輯 | 編輯原始碼]

這是一個布林值(true,false),它指定當影片剪輯獲得鍵盤焦點時,它周圍是否有一個黃色的矩形。如果焦點設定,則返回true,否則返回false。

FramesLoaded

[編輯 | 編輯原始碼]

屬性_framesloaded表示已載入了多少幀影片。這對於監控下載過程非常有用。

SoundBufTime

[編輯 | 編輯原始碼]

稍後討論。

華夏公益教科書