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

Flash Player 10 以降、Adobe AIR 1.5 以降

拡張された描画 API には、 IGraphicsData インターフェイスを実装する一連のクラスが flash.display パッケージに含まれます。これらのクラスは、描画 API の描画メソッドを表す値オブジェクト(データコンテナ)の役割を果たします。

これらのクラスを使用すると、完全な描画を IGraphicsData 型の Vector オブジェクト配列(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() メソッドを使用してグラフィックスをレンダリングします。 drawGraphicsData() メソッドでは、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(GraphicsPathCommand.MOVE_TO, GraphicsPathCommand.LINE_TO, GraphicsPathCommand.LINE_TO); 
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() コマンドを使用するときと異なります。

ベクターグラフィックスデータの読み取り

表示オブジェクトへのベクターコンテンツの描画に加えて、Flash Player 11.6 および Adobe AIR 3.6 以降では、Graphics クラスの readGraphicsData() メソッドを使用して、表示オブジェクトのベクターグラフィックスコンテンツのデータ表現を取得できます。これを使用すると、グラフィックのスナップショットを作成し、実行時にスプライトシートを保存、コピー、作成することなどができます。

readGraphicsData() メソッドを呼び出すと、IGraphicsData オブジェクトを含む Vector インスタンスが返されます。これらは、 drawGraphicsData() メソッドを使用してベクターグラフィックスを描画する際に使用するものと同じオブジェクトです。

readGraphicsData() メソッドでベクターグラフィックスを読み取るには、いくつか制限があります。詳しくは、 ActionScript リファレンスガイドの readGraphicsData() の項目 を参照してください。