デフォルトの表記
文末表現
野中さんの原稿整理例(関根さんより)
****************************************************************************
◎03 Graphics
☆01 ★直線を描きたい
●解説
Sprite.graphicsプロパティはインスタンスのもつGraphicsオブジェクトを参照します。そのオブジェクトに対してGraphicsクラスの描画メソッドを使えば、さまざまなベクターシェイプが描けます。直線を引くには、Graphics.moveTo()およびGraphics.lineTo()メソッドを用います。また、線のスタイルはGraphics.lineStyle()メソッドで指定します。
-------------------------------------------
graphics:Graphics
インスタンスのもつGraphicオブジェクトを参照します。
P
AIR 1.0/Flash Player 9
プロパティ値・・・インスタンスがもつGraphicオブジェクト。Graphicsクラスの描画メソッドを使って、インスタンスにシェイプを描くことができます。読取り専用で、Graphicsインスタンスを設定することはできません。
-------------------------------------------
-------------------------------------------
lineStyle(thickness:Number = NaN, color:uint = 0, alpha:Number = 1.0, pixelHinting:Boolean = false, scaleMode:String = "normal", caps:String = null, joints:String = null, miterLimit:Number = 3):void
現在の描画位置以降の線のスタイルを指定する
M
AIR 1.0/Flash Player 9
thickness:Number・・・線の太さをポイントで示す整数。0~255までの値を指定する。0は極細線になる。/color:uint
・・・線の色を示す正の整数。通常は16進数で表し、たとえば赤は0xFF0000で指定します。デフォルト値は0の黒(0x000000)。/alpha:Number・・・線の色のアルファ値を示す数値。0が完全な透明で、1.0が完全な不透明。デフォルト値は1.0。/pixelHinting:Boolean
・・・trueに設定すると、ピクセルがフルに描線され、鮮明な線になりる。falseではこの調整が行われないため、たとえば直線と曲線の継ぎ目が途切れて見えることもある。デフォルト値はfalse。戻り値はなし。
-------------------------------------------
-------------------------------------------
moveTo(x:Number, y:Number):void
現在の描画位置を、指定したxy座標に移動する
M
AIR 1.0/Flash Player 9
x:Number・・・親インスタンスの基準点を原点とする水平ピクセル座標値。/y:Number・・・
親インスタンスの基準点を原点とする垂直ピクセル座標値。
戻り値はなし。
-------------------------------------------
-------------------------------------------
lineTo(x:Number, y:Number):void
現在の描画位置から指定されたxy座標まで直線を描く
M
AIR 1.0/Flash Player 9
x:Number・・・親インスタンスの基準点を原点とする水平ピクセル座標値。/y:Number
・・・親インスタンスの基準点を原点とする垂直ピクセル座標値。
戻り値はなし。
-------------------------------------------
○記述例
以下のスクリプト03-01-001は、タイムラインに描画用のSpriteインスタンスを動的に配置し。座標(20, 20)を左上隅とする100ピクセル四方の正方形を直線で描きます。描画はGraphics.moveTo()メソッドで、(20, 20)の位置から始めています。線のスタイルはGraphics.lineStyle()メソッドにより、上と右の辺が2ポイントの赤(0xFF0000)、下と左の辺は8ポイントの青(0x0000FF)でアルファは50%(0.5)としました(図「直線で描画した正方形」参照)。
△スクリプト「[ライブラリ]から動的に生成したビットマップをBitmapインスタンスで参照してタイムラインに配置」
// フレームアクション
var mySprite:Sprite = new Sprite();
var myGraphics:Graphics = mySprite.graphics;
addChild(mySprite);
myGraphics.lineStyle(2, 0xFF0000);
myGraphics.moveTo(20, 20);
myGraphics.lineTo(120, 20);
myGraphics.lineTo(120, 120);
myGraphics.lineStyle(8, 0x0000FF, 0.5);
myGraphics.lineTo(20, 120);
myGraphics.lineTo(20, 20);
△図「直線で描画した正方形」
【03_01_Graphics_lineTo_001.tif】
タイムラインにシェイプを直接描くのでなく、上記スクリプトのように描画用のSpriteインスタンスを作成・配置して、そのGraphicsオブジェクトを操作する方が、描画と他の処理とを干渉し合わないように分けられるので便利でしょう。
※[MEMO] Sprite.graphicsプロパティは変数に取る
Sprite.graphicsプロパティで取得するGraphicsオブジェクトの参照は、上記スクリプトのようにGraphicsで型指定した変数に代入しましょう。変数に対してコードヒントが表示されますし、描画メソッドを使うたびにインスタンスのSprite.graphicsプロパティにアクセスするより処理が最適化されます。
上記のスクリプトの処理を分けて、マウスボタンを押したとき(InteractiveObject.mouseDownイベントで)直線の描画を開始し、ボタンを放したときに(InteractiveObject.mouseUpイベントで)終了するようにすると、マウスのドラッグで直線が引けます。さらにドラッグしてマウスを動かしている間(InteractiveObject.mouseMoveイベント)にも描画を続ければ、短い直線の連続として自由な線を描くことができます(図「マウスでドラッグすると自由に線が描ける」参照)。そのように構成したのが、以下のスクリプトです。
△スクリプト「マウスのドラッグで自由な線を描く」
// フレームアクション
var mySprite:Sprite = new Sprite();
var myGraphics:Graphics = mySprite.graphics;
var nThickness:Number = 4;
var nColor:uint = 0x0000FF;
addChild(mySprite);
stage.addEventListener(MouseEvent.MOUSE_DOWN, xBeginLine);
stage.addEventListener(MouseEvent.MOUSE_UP, xEndLine);
function xBeginLine(eventObject:MouseEvent):void {
myGraphics.lineStyle(nThickness, nColor);
myGraphics.moveTo(mouseX, mouseY);
stage.addEventListener(MouseEvent.MOUSE_MOVE, xDrawLine);
}
function xDrawLine(eventObject:MouseEvent):void {
myGraphics.lineTo(mouseX, mouseY);
}
function xEndLine(eventObject:MouseEvent):void {
myGraphics.lineTo(mouseX, mouseY);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, xDrawLine);
}
△図「マウスでドラッグすると自由に線が描ける」
【03_01_Graphics_lineTo_002.tif】
なお、ステージ上のどこでもマウスイベントを受取りたいときは、EventDispatcher.addEventListener()メソッドはStageオブジェクト(DisplayObject.stageプロパティ)に対してイベントリスナーを登録する必要があります。
→関連項目
XX-XX「直線で塗りの図形を描きたい」、XX-XX「矩形を描きたい」、XX-XX「曲線を描きたい」
****************************************************************************