今回から,
ビットマップで塗る
まず,
Graphicsオブジェクト.beginBitmapFill(BitmapDataオブジェクト)
塗りのビットマップは[ライブラリ]に置いて,
タイムラインには予め何も置かなくてよい。つぎのスクリプト1をフレームアクションとして書くだけだ。
スクリプト1 Shapeインスタンスに描いた円をビットマップで塗る
// フレームアクション
var nSize:Number = stage.stageHeight / 2;
var myShape:Shape = new Shape();
var myGraphics:Graphics = myShape.graphics;
var myTexture:BitmapData = new Image();
myGraphics.beginBitmapFill(myTexture);
myGraphics.drawCircle(nSize, nSize, nSize);
myGraphics.endFill();
addChild(myShape);
タイムラインに動的にShapeインスタンス
- ※1
- Graphics.
beginBitmapFill()メソッドには, オプションとしてあと3つの引数がある。第2引数はビットマップの変形を定めるMatrixオブジェクト, 第3引数はタイル状に塗るかどうかのブール (論理) 値, 第4引数がスムージングに関わるレンダリングの仕方を決める。 - ※2
- ビットマップ
(Image) のインスタンスをつくるとき, コンストラクタに引数を渡していない (new Image())。これはFlash Professional CS5以降の書き方なので, Flash CS4 Professional以前では引数をふたつ渡す必要がある (前掲第34回 「3次元空間における回転」 の 「ビットマップのインスタンスを動的に配置する」 参照)。
三角形に分けて描く - Graphics. drawTriangles()メソッド
描画領域をいくつもの三角形に分けて描くのが,
Graphics.
描くのが仮に三角形1ひとつだけだったら,
var vertices:Vector.<Number> =
new <Number>[20, 20, 120, 20, 20, 120]; // 三角形1の3頂点座標
myGraphics.drawTriangles(vertices);
しかし,
Graphics.
スクリプト2 Graphics.
// フレームアクション
var myShape:Shape = new Shape();
var myGraphics:Graphics = myShape.graphics;
var myTexture:BitmapData = new Image();
var vertices:Vector.<Number> = new Vector.<Number>();
// 三角形1の3頂点座標
vertices.push(20, 20);
vertices.push(120, 20);
vertices.push(20, 120);
// 三角形2の3頂点座標
vertices.push(140, 40);
vertices.push(140, 140);
vertices.push(40, 140);
myGraphics.beginBitmapFill(myTexture);
myGraphics.drawTriangles(vertices);
myGraphics.endFill();
addChild(myShape);
[ムービープレビュー]を確かめると,
- ※3
- 塗りの起点は,
Graphics. beginBitmapFill()メソッドの第2引数として渡すMatrixオブジェクトで変えられる (前述注※1参照)。