flashmx action畫線方法(下)

來源:互聯網
上載者:User

翻譯:flashmeng

MovieClip.beginFill(rgb, alpha)

這個指令用來設定“虛擬鋼筆”所繪製出的封閉的地區的填充顏色和不透明度,如果沒有指定lineStyle的rgb和alpha的值則線條是不可見的。
RGB:用來設定封閉地區的填充顏色,和上邊的lineStyle的設定方法一樣都是使用16進位代碼來表示。如果沒有指定顏色則填充為黑色。
Alpha:和lineStyle的意義相同,不再細述。
執行個體說明:
如同lineStyle,你可以將rgb, alpha的值預設而使用預設值。它需要配合使用 lineTo 或 curveTo (這個以後將講道) 來定義封閉地區的各個頂點位置(也就是圍成這個封閉地區的線條的交點位置)從而知道這個封閉地區的形狀、大小以及位置。舉一個簡單的例子:

_root.beginFill(0x00FF00);_root.moveTo(100,100); // this is the origi_root.lineTo(200,100);_root.lineTo(200,200);_root.lineTo(100,200);

這段as將產生一個綠色的正方形,四個頂點的座標分別為:
(100,100);(200,100);(200,200);(100,200)。
我們可以通過定義lineStyle來擴充一下

on (release) {  _root.lineStyle(0x0000FF);  _root.beginFill(0x00FF00);  _root.moveTo(100,100); // this is the origin  _root.lineTo(200,100);  _root.lineTo(200,200);  _root.lineTo(100,200);}

這樣就可以得到一個邊框為1像素的藍色的布透明的邊框,其他各項參數不變。
但是,我強烈推薦通過使最後所畫的直線回接到圖形的出發點的方式來封閉填充圖形。有關上面的代碼的另外一個問題是填充是從左開始的,後面每遇到一個lineto 語句都會繼續改變。另外一種可能引起麻煩的情況是,在勾畫填充的代碼中,每加入一個moveto語句都會使原來的填充自動封閉而重新開始一個新的填充。運行下面的代碼來看一下是怎樣的情形, (也就是說但如果你在as中沒有閉合所繪製的路徑的話,程式就會自動的將第一個“點”和最後一個“點”串連起來使得路徑閉合以得到一個封閉的地區。)看如下代碼:

_root.beginFill(0x00FF00);_root.moveTo(100,100); // 這是原點_root.lineTo(200,100);_root.lineTo(200,200);_root.moveTo(100,200); // 閉合第一個填充地區並且開始一個新的_root.lineTo(200,300);_root.lineTo(100,300);這樣我們可以得到兩個等邊三角形。

MovieClip.endFill()

這個指令沒有附帶參數,它聲明結束一個beginFill指令並且清除早先對“鋼筆”的種種設定,它不能單獨出現只能和beginFill指令成對出現。當然你可以不使用它就像上邊的as一樣,我們建議你養成使用endFill的好習慣。下邊的as將繪製一個正方形:

_root.beginFill(0x00FF00);_root.moveTo(100,100); // 定義了原點位置_root.lineTo(200,100);_root.lineTo(200,200);_root.lineTo(100,200);_root.lineTo(100,100); // 閉合路徑_root.endFill(); // 結束Fill

這是段很工整的as,下邊的這個例子中你可以脫拽三個控制代碼來即時改變三角形的形狀、位置、大小等。

下邊是核心代碼:

// 在舞台上放置3個控制代碼來定義出三角形的各個頂點_root.attachMovie("squareHandle", "h1", 5);_root.attachMovie("squareHandle", "h2", 6);_root.attachMovie("squareHandle", "h3", 7);h1._x = 50;h1._y = 150;h2._x = 250;h2._y = 150;h3._x = 150;h3._y = 50;// 建立一個空的MC來放置他們_root.createEmptyMovieClip("mc", 1);// 定義函數drawfunction draw() {  // 清除以前的填充設定  mc.clear();  // 設定填充的各項參數  mc.beginFill(0x0000FF, 20);  // 根據3個控制代碼的位置繪製出三角形  mc.moveTo(h1._x, h1._y);  mc.lineTo(h2._x, h2._y);  mc.lineTo(h3._x, h3._y);  mc.lineTo(h1._x, h1._y);  // 結束Fill  mc.endFill();}// 使函數draw每隔25毫秒重新整理一次setInterval(draw, 25);// 完成as

MovieClip.clear()

在上邊的as中我們遇到了這個新的指令mc.clear();它的作用就是清除mc。包括對這個mc本身的設定和mc中所包含的物件,並且將虛擬鋼筆的各項參數恢複到預設值。

舉例說明:
在本文的開始我們就已提到及時清除繪製過的、沒有用的線條或形狀的必要性,使用clear可以及時的釋放記憶體空間而不至於造成系統崩潰。但由於它清除了所有的物件,當你想要保留某個物件的時候你就不得不再次把它“繪製”出來。
下邊是例子:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.