繪製路徑

Flash Player 10 以及更新的版本,Adobe AIR 1.5 以及更新的版本

有關繪製線段和曲線的章節 (請參閱繪製線段和曲線) 中介紹了下列命令:用於繪製單一線段的命令 (Graphics.lineTo())、用於繪製單一曲線的命令 (Graphics.curveTo()),以及將線段移至另一點以形成圖形的命令 (Graphics.moveTo())。部分 ActionScript 繪圖 API 功能強化,例如 Graphics.drawPath()Graphics.drawTriangles(),會利用現有的繪圖命令作為參數。因此,您可以提供一連串的 Graphics.lineTo()Graphics.curveTo()Graphics.moveTo() 命令給 Flash 執行階段在單一陳述式中執行。

有兩個繪圖 API 增強功能可以讓 Graphics.drawPath()Graphics.drawTriangles() 合併現有命令:

  • GraphicsPathCommand 列舉類別:GraphicsPathCommand 類別會將多個繪圖命令與常數值建立關聯。您先使用其中一連串的值做為 Graphics.drawPath() 方法的參數,然後再透過單一命令,呈現一整個形狀或數個形狀。您也可以動態改變傳遞至這些方法的值,以變更現有形狀。

  • Vector 陣列:Vector 陣列包含一連串具有特定資料類型的值。因此,您可以將一連串 GraphicsPathCommand 常數儲存在某一 Vector 物件中,以及將一連串座標儲存在其它 Vector 物件中。Graphics.drawPath()Graphics.drawTriangles() 會一併指定這些值以繪製路徑或形狀。

您不再需要針對形狀的每個區段使用不同的命令。例如,Graphics.drawPath() 方法會將 Graphics.moveTo()Graphics.lineTo()Graphics.curveTo() 合併成為一個方法。您不需要個別呼叫這些方法,它們會精簡為數字識別項 (如 GraphicsPathCommand 類別中所定義)。moveTo() 作業由 1 表示,而 lineTo() 作業則由 2 表示。請先將這些值的陣列儲存在 Vector.<int> 物件內,以便於 commands 參數中使用。然後,再建立包含 Vector.<Number> 物件中座標的陣列做為 data 參數。每個 GraphicsPathCommand 值都會對應至儲存在 data 參數中的座標值,其中兩個連續的數字就可以定義目標座標空間中的一個位置。

備註: 向量中的這些值都不是 Point 物件,因為向量是一系列數字,其中每兩個數字一組,即可表示一組 x/y 座標。

Graphics.drawPath() 方法會使每個命令符合其個別的座標點值 (兩個或四個為一組的數字),以便於 Graphics 物件中產生路徑:

package{ 
import flash.display.*; 
 
public class DrawPathExample extends Sprite { 
    public function DrawPathExample(){ 
 
    var square_commands:Vector.<int> = new Vector.<int>(5,true); 
    square_commands[0] = 1;//moveTo 
    square_commands[1] = 2;//lineTo 
    square_commands[2] = 2; 
    square_commands[3] = 2; 
    square_commands[4] = 2; 
 
    var square_coord:Vector.<Number> = new Vector.<Number>(10,true); 
    square_coord[0] = 20; //x 
    square_coord[1] = 10; //y 
    square_coord[2] = 50; 
    square_coord[3] = 10; 
    square_coord[4] = 50; 
    square_coord[5] = 40; 
    square_coord[6] = 20; 
    square_coord[7] = 40; 
    square_coord[8] = 20; 
    square_coord[9] = 10; 
 
    graphics.beginFill(0x442266);//set the color 
    graphics.drawPath(square_commands, square_coord); 
    } 
} 
}

在上例中,我們分別指定每個指令和座標組以顯示它們在陣列中的位置,但也可以使用單一陳述式來指定它們。下列範例會在單一 push() 陳述式中指定每個陣列的值,藉此繪製相同的星星:

package{ 
import flash.display.*; 
 
public class DrawPathExample extends Sprite { 
    public function DrawPathExample(){ 
 
    var square_commands:Vector.<int> = new Vector.<int>(); 
    square_commands.push(1, 2, 2, 2, 2); 
    var square_coord:Vector.<Number> = new Vector.<Number>(); 
    square_coord.push(20,10, 50,10, 50,40, 20,40, 20,10); 
 
    graphics.beginFill(0x442266); 
    graphics.drawPath(square_commands, square_coord); 
    } 
} 
}