グラフィックスデータクラスの使用

Flash Player 10 以降、Adobe AIR 1.5 以降

拡張された描画 API では、flash.display パッケージに IGraphicsData 型(各クラスが実装するインターフェイス)のクラス群が導入されました。IGraphicsData インターフェイスを実装するクラスは、描画 API のメソッドのデータコンテナとして機能します。

以下のクラスが IGraphicsData インターフェイスを実装しています。

これらのクラスを使用すると、完全な描画を IGraphicsData 型のベクターオブジェクト配列(Vector.<IGraphicsData>)に格納し、他のシェイプインスタンスのデータソースとして再利用したり、後で使用するために描画情報を格納したりできます。

塗りクラスは塗りのスタイルごとに複数ありますが、境界線クラスは 1 つだけです。境界線クラスは塗りクラスを使用してスタイルを定義するので、ActionScript の境界線クラスは IGraphicsData だけです。したがって、すべての境界線は実際には境界線クラスであり塗りクラスです。それ以外については、これらのグラフィックスデータクラスの API は、flash.display.Graphics クラスに存在するメソッドを反映しています。

グラフィックスメソッド

データクラス

beginBitmapFill()

GraphicsBitmapFill

beginFill()

GraphicsSolidFill

beginGradientFill()

GraphicsGradientFill

beginShaderFill()

GraphicsShaderFill

lineBitmapStyle()

GraphicsStroke + GraphicsBitmapFill

lineGradientStyle()

GraphicsStroke + GraphicsGradientFill

lineShaderStyle()

GraphicsStroke + GraphicsShaderFill

lineStyle()

GraphicsStroke + GraphicsSolidFill

moveTo()

lineTo()

curveTo()

drawPath()

GraphicsPath

drawTriangles()

GraphicsTrianglePath

さらに、GraphicsPath クラスには、GraphicsPath インスタンス用にこれらのコマンドを簡単に定義するために、GraphicsPath.moveTo()GraphicsPath.lineTo()GraphicsPath.curveTo()GraphicsPath.wideLineTo() および GraphicsPath.wideMoveTo() の各ユーティリティメソッドを独自に備えています。これらのユーティリティメソッドを使用すると、簡単にコマンドおよびデータ値を直接定義または更新できます。

IGraphicsData インスタンスのコレクションを作成したら、Graphics.drawGraphicsData() メソッドを使用してグラフィックスをレンダリングします。Graphics.drawGraphicsData() メソッドは、描画 API を使用して順番に IGraphicsData インスタンスのベクターを実行します。

// stroke object 
var stroke:GraphicsStroke = new GraphicsStroke(3); 
stroke.joints = JointStyle.MITER; 
stroke.fill = new GraphicsSolidFill(0x102020);// solid stroke 
 
// fill object 
var fill:GraphicsGradientFill = new GraphicsGradientFill(); 
fill.colors = [0x0000FF, 0xEEFFEE]; 
fill.matrix = new Matrix(); 
fill.matrix.createGradientBox(70,70, Math.PI/2); 
// path object 
var path:GraphicsPath = new GraphicsPath(new Vector.<int>(), new Vector.<Number>()); 
path.commands.push(1,2,2); 
path.data.push(125,0, 50,100, 175,0); 
 
// combine objects for complete drawing 
var drawing:Vector.<IGraphicsData> = new Vector.<IGraphicsData>(); 
drawing.push(stroke, fill, path); 
 
// draw the drawing 
graphics.drawGraphicsData(drawing);

例の描画で使用されているパスの値を 1 つ変更すると、シェイプを複数回再描画してさらに複雑なイメージを作成できます。

// draw the drawing multiple times 
// change one value to modify each variation 
graphics.drawGraphicsData(drawing); 
path.data[2] += 200; 
graphics.drawGraphicsData(drawing); 
path.data[2] -= 150; 
graphics.drawGraphicsData(drawing); 
path.data[2] += 100; 
graphics.drawGraphicsData(drawing); 
path.data[2] -= 50;graphicsS.drawGraphicsData(drawing);

IGraphicsData オブジェクトでは塗りと境界線のスタイルを定義できますが、これらのスタイルは必ずしも必要ありません。つまり、Graphics クラスのメソッドを使用してスタイルを設定し、IGraphicsData オブジェクトを使用して保存されているパスのコレクションを描画したり、その逆のことを行ったりできます。

注意: 新しい描画を開始する前に、Graphics.clear() メソッドを使用して以前の描画をクリアします。そうしないと、前の例のように、元の描画の上に新しい描画が追加されます。IGraphicsData オブジェクトのパスまたはコレクションの単一の部分を変更した場合は、変更を表示するために全体を再描画します。

グラフィックスデータクラスを使用した場合、3 つ以上のポイントが描画されると、その時点でシェイプが閉じるので、常に塗りがレンダリングされます。塗りが閉じても、境界線は閉じません。この動作は、複数の Graphics.lineTo() または Graphics.moveTo() コマンドを使用するときと異なります。