使用 clear 刪除繪制
clear 是所有方法中最簡單的,它可以用來刪除在影片中所繪制的直線,曲線或填充色。請注意,這個命令中對其它 graphics 繪制的圖像不起作用。換句話講,如果在編輯環(huán)境下繪制了一個圖形,再對其使用 clear() 命令,結果是無效的。
在繪圖中,使用 clear 方法會有些意想不到的效果。在繪圖 API 中,如果繪制的影片剪輯越多,運行速度就越慢。對于有很多繪制圖形的影片來說,速度不會立刻慢下了,而是隨著每個圖形所占用的繪制時間會越來越長,從而逐漸地變慢。就算新的圖形完全覆蓋住了所有舊圖形,舊圖形的矢量信息也仍然存在并且每次都會被重繪,只有使用 clear 函數才可以完全刪除之前舊圖形的矢量信息。
使用 lineStyle 設置線條樣式
使用 lineStyle(width,color,alpha)方法,作用是為以后使用的繪圖線條設置線條樣式,該命令對于前面使用的繪圖線條不會產生影響。實際上,除了清除或覆蓋之外,沒有方法可以影響或改變已經繪制的線條或填充。
前面列出的這些參數將來會經常使用,還有一些額外的可選參數如像素提示(pixel),縮放模式(scale mode),端點(caps),拐角類型(joints)和切斷尖角(mitres)。如果大家需要更多的設置,也許會用到它們,但是大多數情況下,只會用到下面這些參數。對于它們無需做太多解釋,只是來復習一下:
- width:線條的寬度以像素為單位。只能使用0或正整數。雖然可以使用十進制浮點數,但會被取整為最接近的正整數。如果輸入的是0或負數, Flash 將繪制1像素寬的線。這與在 Flash IDE 中在屬性面板中選擇“細線”的功能相同。
- color:線條的顏色。使用十進制或十六進制的24位色彩值表示。
- alpha:線條的透明度。使用0.0到1.0數字之間的數表示透明度的比例。值為1.0表示完全不透明,值為0.0表示完全透明或不可見。注意,這與 AS 2 中使用 0到100 表示法是不同的。
由于這些參數是可選的,可以只使用 lineStyle(1) 來設置一條1像素寬的黑色線條。其實第一個參數也是可選的,如果不填 widh 參數,只使用 lineStyle() 的話,那么線條就被清除,只獲得了一條不可見的線,相當于使用繪圖指令時沒有設置線條樣式(lineStyle)。另一個容易出錯的地方是,在使用 clear 方法時,不僅清除了當前繪制的圖形而且也清除了當前使用的線條樣式。如果在影片繪圖時設置了一個普通的線條樣式,而后又將線條清除,那么在繪制其它圖形之前還需要重新設置線條樣式。否則的話,接下來繪制的線條就是不可見的,調用 clear 方法同時還會將繪圖指針位置歸為0,0。
使用 lineTo 和 moveTo 繪制直線
在一種繪圖語言中會有多種方法用來繪制直線。一種是使用畫線指令,需要有一個起點和一個終點,并在這兩點之間畫一條直線。另一種是使用 lineTo 指令,只需要一個終點。那么 ActionScript 是怎樣工作的呢,如果向某一點畫線,哪里才是起點呢?如果之前沒有進行過畫線,那么起點就是0,0點,可以這樣寫:lineTo(100, 100);
結果將會看到一條從左上角(0,0)畫到100,100像素位置的線(假設已經設置了線條樣式)。在繪制完最少一條線后,這條線的終點位置就會成為下一條線的起點位置。不過,我們還可以使用 moveTo 方法為下一條線指定一個新的起點位置。
可以把繪圖 API 想像成一個拿著筆和紙的機器人,開始的時候,筆處在0,0點。當我們告訴它向某點畫一條線時,它就將筆在紙上劃過,并向這個位置移動。 moveTo 方法就像在說“ok,現在抬起筆,放到下一個點上!彪m然僅使用 moveTo 指令不會產生一個新的圖形,但是它會影響下一次繪圖時的位置。通常使用 moveTo 作為第一條繪圖指令,用于將繪圖 API 的“筆”移動到起點位置。現在大家已經擁有了足夠的知識可以來實踐一下了,讓我們創(chuàng)建一個簡單的繪圖應用程序,這個程序是完全依賴繪圖 API 完成的。這里是文檔類:
package { import flash.display.Sprite; import flash.events.MouseEvent; public class DrawingApp extends Sprite { public function DrawingApp() { init(); } private function init():void { graphics.lineStyle(1); stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); } private function onMouseDown(event:MouseEvent):void { graphics.moveTo(mouseX, mouseY); stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); } private function onMouseUp(event:MouseEvent):void { stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); } private function onMouseMove(event:MouseEvent):void { graphics.lineTo(mouseX, mouseY); } } }
首先,導入 MouseEvent 類,因為這里的每件事都要用到鼠標事件。在 init 方法中,線條樣式設置為 1 像素黑色線,并增加 mouseDown 和 mouseUp 作為事件偵聽器。
然后是 onMouseDown 方法,每當用戶按下鼠標是都會調用它,這意味著用戶要開始在當前鼠標位置畫線了。這個函數通過使用 moveTo 方法將那支虛擬的筆放置在當前鼠標的位置,以鼠標坐標為參數,隨后為 mouseMove 添加了一個偵聽器。 每當用戶移動鼠標時,都會調用 onMouseMove 方法,向當前鼠標的位置畫一條線。 最后是 onMouseUp 方法,用于刪除 mouseMove 偵聽器使其不再進行畫線。 好的,現在已經制作好了一個短小精悍的繪圖程序。我們不需要再費太大的力氣就可以為這個程序加入一些簡單的控制,讓它具有完整繪圖程序的功能。只需要為線條顏色(color)和線條寬度(width)創(chuàng)建一些變量,再創(chuàng)建一些按鈕什么的用來改變它們,并重新調用 lineStyle 方法使用這些新的值。對了,還可以再放一個按鈕用于調用 clear 方法。把這個留做是一個練習,希望大家有興趣的話,能夠自行完成。
出處:藍色理想
責任編輯:bluehearts
上一頁 渲染技術 [3] 下一頁 渲染技術 [5]
◎進入論壇RIA設計與應用版塊參加討論
|