図形を描画する
次に、簡単な図形をFlashムービー上で表示してみましょう。図形を定義するには、図形そのものを表すSWFShape
オブジェクトを生成しなければなりません。SWFShape
オブジェクトの生成にはswfShape()
コンストラクタを呼び出します。
SWFShape swfshape ( void )
最も基本的な図形は1本の線を描画することでしょう。線を描画するには、まず線の太さや色をsetLine()
関数で設定する必要があります。
void swfshape->setline ( int width, int red, int green, int blue [, int a] )
setLine()
関数は、SWFShape
オブジェクトが描画する線の太さと色を設定します。width
には線の太さを、red
には赤要素、green
には緑要素、blue
には青要素、a
にはアルファ値を0~255までの範囲でそれぞれ指定します。アルファ値を表すa
は省略可能です。
SWFShape
オブジェクトには、現在の座標を表すカレントポジションという考え方があります。線の描画は、カレントポジションが表している座標から行われるため、まずはカレントポジションを設定する必要があります。カレントポジションの設定はmovePen()
関数、またはmovePenTo()
関数を使います。
void swfshape->movepen ( int dx, int dy ) void swfshape->movepento ( int x, int y )
movePen()
関数は、現在のカレントポジションから相対的に移動するX座標とY座標の値を設定します。この関数で設定されるカレントポジションは(現在のX座標 + dx、現在のY座標 + dy)となります。
movePenTo()
関数は、絶対座標でカレントポジションを設定します。x
には、新しいカレントポジションのX座標を、y
にはY座標をそれぞれ指定します。
カレントポジションから、指定した座標まで1本の線を描画するにはdrawLine()
関数、またはdrawLineTo()
関数を使います。
void swfshape->drawline ( int dx, int dy ) void swfshape->drawlineto ( int x, int y )
drawLine()
関数は、現在のカレントポジションから相対的な座標で終点の座標を設定します。これに対しdrawLineTo()
関数は、絶対座標で終点の座標を設定します。これらの関数を呼び出すことで、現在のカレントポジションから指定した座標まで線が描画されます。また、drawLine()
やdrawLineTo()
関数で線を引いた後は、その線の終点が新しいカレントポジションとして自動的に設定されます。
SWFShape
オブジェクトの図形の設定が終了したら、SWFMovie
オブジェクトに図形を追加します。SWFShape
を設定しただけでは、表示されることはありません。実際のムービー上に表示するには、SWFMovie
オブジェクトにSWFShape
をadd()
関数で設定する必要があります。
void swfmovie->add ( resource instance )
instrance
には、このSWFMovie
オブジェクトに追加する任意のオブジェクトを指定します。SWFShape
を追加することで、SWFShape
オブジェクトが表す図形をムービー上に表示できます。
<?php $shape = new SWFShape(); $shape->setLine(5, 0, 0, 0); $shape->movePenTo(10, 10); $shape->drawLineTo(390, 290); $swf = new SWFMovie(); $swf->setDimension(400, 300); $swf->setBackground(255, 255, 255); $swf->add($shape); $swf->save("test.swf"); print "SWF file has been saved."; ?>
コード02では、カレントポジションを(10,10)に設定し、(390, 290)まで線を引いています。これらの処理はmovePenTo()
関数とdrawLineTo()
関数を用いているため、指定した座標はムービーの左上隅を(0,0)とする座標であり、カレントポジションからの相対的な座標ではありません。
テキストを表示する
文字をムービー上に表示するには、先にフォントが必要になります。フォントを表すのはSWFFont
オブジェクトです。このオブジェクトを生成するにはswfFont()
コンストラクタを呼び出します。
SWFFont swffont ( string filename )
filename
には、読み込むフォントの名前を指定します。Mingは、このファイルのフォント定義を読み込んでフォントを利用します。この関数に指定するファイルは、FDBという拡張子のフォント定義を格納するファイルです。FDB形式のファイルを生成するツールも提供されていますが、公式サイトからFDBファイルのセットをダウンロードすることもできます。Mingパッケージを学習するコードを書く場合は、とりあえず公式サイトからフォントをダウンロードすると良いでしょう。
テキストはSWFText
オブジェクトで表されます。SWFText
は、SWFShape
オブジェクトと同じように、必要なテキストの設定を行った後SWFMovie
オブジェクトに追加することでムービー上にテキストを表示できます。SWFText
オブジェクトを作成するにはswfText()
コンストラクタを呼び出します。
SWFText swftext ( void )
取得したSWFText
オブジェクトに対して、フォントや表示する座標、表示するテキストを表す文字列などを設定して、適切に初期化しなければなりません。生成したSWFFont
をSWFText
に設定するにはsetFont()
関数を使います。
void swftext->setfont ( string font )
font
には、正しく読み込まれたSWFFont
オブジェクトを指定します。
表示するテキストの色はsetColor()
関数で設定できます。
void swftext->setcolor ( int red, int green, int blue [, int a] )
red
には赤要素、green
には緑要素、blue
には青要素、a
にはアルファ値を0~255までの範囲でそれぞれ指定します。a
は省略可能です。
表示するテキストの座標はmoveTo()
関数で設定します。
void swftext->moveto ( int x, int y )
x
にはX座標を、y
にはY座標を指定します。この座標には SWFShape
のカレントポジションは存在しません。ムービーの左上隅を原点とする座標です。
テキストのサイズはsetHeight()
関数から設定できます。この関数は現在設定されているフォントの高さを設定するもので、指定した高さから表示されるフォントの大きさが決定されます。
void swftext->setheight ( int height )
height
にはフォントの高さを指定します。
当然、SWFText
オブジェクトに表示するテキストとなる文字列を設定しなければなりません。テキストを描画するにはaddString()
関数を呼び出します。addString()
関数は、SWFText
の現在の設定を用いてテキストを描画します。
void swftext->addstring ( string string )
以上で、テキストを表示するための基本的な設定は終了です。SWFText
オブジェクトを用意することができれば、後はSWFMovie
オブジェクトのadd()
関数で追加するだけです。
<?php $font = new SWFFont("test.fdb"); $text = new SWFText(); $text->setFont($font); $text->setColor(0, 0, 0); $text->moveTo(10, 50); $text->setHeight(20); $text->addString("I have no interest in ordinary humans."); $swf = new SWFMovie(); $swf->setDimension(400, 300); $swf->setBackground(255, 255, 255); $swf->add($text); $swf->save("test.swf"); print "SWF file has been saved."; ?>
コード03 は、ソースファイルと同じディレクトリに配置されている「test.fdb」というフォントを使ってテキストを描画するSWFムービーを生成しています。
塗りつぶし
長方形や多角形など、閉じた図形の内部を塗りつぶすにはSWFFill
オブジェクトを生成してSWFShape
に設定する必要があります。SWFFill
オブジェクトはSWFShape
オブジェクトのaddFill()
関数の戻り値から取得できます。
SWFFill SWFShape->addFill ( int red, int green, int blue [, int a] )
この関数は、指定した塗りつぶし色を図形に追加します。この関数の引数から指定した色が塗りつぶしに使われるSWFFill
オブジェクトとして登録されます。red
には赤要素、green
には緑要素、blue
には青要素、a
にはアルファ値を0~255までの範囲でそれぞれ指定します。a
は省略可能です。
取得したSWFFill
オブジェクトは、SWFShape
オブジェクトのsetLeftFill()
関数、またはsetRightFill()
関数で設定します。通常、図形が時計回りに記述されている場合はsetRightFill()
関数に、反時計回りならばsetLeftFill()
関数に設定します。
void swfshape->setleftfill ( swfgradient fill ) void swfshape->setleftfill ( int red, int green, int blue [, int a] ) void swfshape->setrightfill ( swfgradient fill ) void swfshape->setrightfill ( int red, int green, int blue [, int a] )
fillにはSWFFill
オブジェクトのような塗りつぶしオブジェクトを指定します。数値型で直接色を表すred
、green
、blue
、a
引数を指定することもできますが、これは、「$swfshape->setLeftFill($swfshape->addFill($red, $green, $blue, $a))」という記述と同義です。
塗りつぶされるのは、SWFShape
が定義する図形の内部空間です。複数の線が交差し、図形が閉じられている場合はその内部が塗りつぶしの対象となります。例えば、三角形や長方形を描画したい場合は、線の開始座標にカレントポジションを設定し、後はdrawLine()
またはdrawLineTo()
関数で連続して線を引き、最後に開始点に向かって線を引いて図形を閉じることで、その形の内部が塗りつぶされます。
<?php $shape = new SWFShape(); $fill = $shape->addFill(0xFF, 0, 0); $shape->setRightFill($fill); $shape->setLine(5, 0, 0, 0); $shape->movePenTo(200, 0); $shape->drawLineTo(400, 300); $shape->drawLineTo(0, 300); $shape->drawLineTo(200, 0); $swf = new SWFMovie(); $swf->setDimension(400, 300); $swf->add($shape); $swf->save("test.swf"); print "SWF file has been saved."; ?>
コード04 は、三角形を表すSWFShape
オブジェクトを作成し、その内部を赤色で塗りつぶしています。