シェイプメーカークラス

通常AS3で四角形を描画する場合、例えば

var rect:Shape = new Shape();
rect.graphics.beginFill(0xff000000);	// 背景色
rect.graphics.lineStyle(0, 0x000000);	// 線幅・線色
rect.graphics.drawRect(0, 0, 10, 10);	// XY座標,幅,高さ
rect.graphics.endFill();		// 塗り潰し終了

といったようにごちゃごちゃ書かなければなりません。
めんどくさすぎて夏ばてになりました。


そういった作業を少しでも楽にできればと思いまして、
基本的なシェイプ(今回は四角形と円)を描画するクラスを考えてみました。

/**
 * ・シェイプメーカークラス
 */
package
{
	import flash.display.Shape;
	import lib.type.Size;
	import flash.display.Graphics;
	
	public class ShapeMaker
	{
// --------------------------------------------------------------------------------------
// --プロパティ	-----------------------------------------------------------------------------
		private var _lineColor		:uint;		// 線色
		private var _fillColor		:uint;		// 塗り色
		
		private var _lineSize		:Number;	// 線幅
		
		private var _drawLineFlg	:Boolean;	// 線を描画するならtrue
		private var _fillFlg		:Boolean;	// 塗りつぶすならtrue
// --------------------------------------------------------------------------------------
// --初期処理	-----------------------------------------------------------------------------
		/**
		 * ■コンストラクタ
		 * 
		 * @param lineColor		線色
		 * @param fillColor		塗り色
		 * @param lineSize		線幅
		 * @param drawLineFlg	線を描画するならtrue
		 * @param fillFlg		塗りつぶすならtrue
		 */
		public function	ShapeMaker(
							lineColor	:uint		= 0x000000,
							fillColor	:uint		= 0x000000,
							lineSize	:Number		= 0,
							drawLineFlg	:Boolean	= true,
							fillFlg		:Boolean	= true
						)
		{
			_lineColor		= lineColor;
			_fillColor		= fillColor;
			_lineSize		= lineSize;
			_drawLineFlg	= drawLineFlg;
			_fillFlg		= fillFlg;
		}
// --------------------------------------------------------------------------------------
// --通常メソッド	-------------------------------------------------------------------------
		/**
		 * ■四角形作成メソッド
		 * 
		 * @param w 横幅
		 * @param h 縦幅
		 * 
		 * @return 作成した四角形
		 */
		public function	makeRectangle(w:Number, h:Number):Shape
		{
			var rect:Shape = new Shape();			// シェイプ
			var rectGr:Graphics = rect.graphics;	// グラフィック
			
			if (_fillFlg)
			{
				rectGr.beginFill(_fillColor);				// 背景色
			}
			if (_drawLineFlg)
			{
				rectGr.lineStyle(_lineSize, _lineColor);	//線幅・線色
			}
			rectGr.drawRect(0, 0, w, h);				// XY座標, 幅, 高さ
			if (_fillFlg)
			{
				rectGr.endFill();							// 塗り潰し終了
			}
			
			return rect;	// 作成した四角形を返す
		}
		
		/**
		 * ■円作成メソッド
		 * 
		 * @param r 半径
		 * 
		 * @return 作成した円
		 */
		public function	makeCircle(r:Number):Shape
		{
			var circle:Shape = new Shape();				// シェイプ
			var circleGr:Graphics = circle.graphics;	// グラフィック
			
			if (_fillFlg)
			{
				circleGr.beginFill(_fillColor);				// 背景色
			}
			if (_drawLineFlg)
			{
				circleGr.lineStyle(_lineSize, _lineColor);	//線幅・線色
			}
			circleGr.drawCircle(0, 0, r);					// XY座標, 半径
			if (_fillFlg)
			{
				circleGr.endFill();							// 塗りつぶし終了
			}
			
			return circle;	// 作成した円を返す
		}
// --------------------------------------------------------------------------------------
// --プロパティ設定メソッド	---------------------------------------------------------------------
		/**
		 * ■線プロパティ設定メソッド
		 * 
		 * @param drawLineFlg	線を描画するならtrue
		 * @param lineColor		線色
		 * @param lineSize		線幅
		 */
		public function	setLine(
							drawLineFlg	:Boolean	= true,
							lineColor	:uint		= 0x000000,
							lineSize	:Number		= 0
						):void
		{
			_drawLineFlg	= drawLineFlg;
			_lineColor		= lineColor;
			_lineSize		= lineSize;
		}
		
		/**
		 * ■塗りプロパティ設定メソッド
		 * 
		 * @param fillFlg	塗りつぶすならtrue
		 * @param fillColor	塗り色
		 */
		public function	setFill(
							fillFlg		:Boolean	= true,
							fillColor	:uint		= 0x000000
						):void
		{
			_fillFlg	= fillFlg;
			_fillColor	= fillColor;
		}
// --------------------------------------------------------------------------------------
// --プロパティの設定取得メソッド	-------------------------------------------------------------
	}
}



こんな感じで使えます。
線無しの赤い四角形を描画したい場合。

var stageSp:Sprite = new Sprite();	// 描画対象のステージスプライト

// 線無しで塗りが赤いシェイプの描画をするよう初期化してインスタンスを作成
var g:ShapeMaker = new ShapeMaker(0, 0xff0000, 0, false);
var rect:Shape = g.makeRectangle(10, 10);	// 10×10の四角形を描画
stageSp.addChild(rect);

このスクリプト

var circle:Shape = g.makeCircle(10);

として円を描いた場合、
線無しの塗りが赤い円を描画できます。


ちなみに線の有り無しや色、塗りの色などは「setLine」、「setFill」で再設定できます。


今回は四角形と円だけですが、今後角が丸い四角形や、普通の線などの描画メソッドを追加していけば、
地味に便利なクラスになりそうです。