書き物

技術とか作った物の話とか愚痴文句感想など

シェイプメーカークラス

通常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」で再設定できます。


今回は四角形と円だけですが、今後角が丸い四角形や、普通の線などの描画メソッドを追加していけば、

地味に便利なクラスになりそうです。