SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

PHPとMingで作るFlashサーバー

SWFムービーを作成するWebサーバーを無償ツールだけで構築する

  • X ポスト
  • このエントリーをはてなブックマークに追加

図形を描画する

 次に、簡単な図形をFlashムービー上で表示してみましょう。図形を定義するには、図形そのものを表すSWFShapeオブジェクトを生成しなければなりません。SWFShapeオブジェクトの生成にはswfShape()コンストラクタを呼び出します。

swfShape()コンストラクタ
SWFShape swfshape ( void )

 最も基本的な図形は1本の線を描画することでしょう。線を描画するには、まず線の太さや色をsetLine()関数で設定する必要があります。

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()関数を使います。

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()関数を使います。

drawLine()、drawLineTo()関数
void swfshape->drawline ( int dx, int dy )
void swfshape->drawlineto ( int x, int y )

 drawLine()関数は、現在のカレントポジションから相対的な座標で終点の座標を設定します。これに対しdrawLineTo()関数は、絶対座標で終点の座標を設定します。これらの関数を呼び出すことで、現在のカレントポジションから指定した座標まで線が描画されます。また、drawLine()drawLineTo()関数で線を引いた後は、その線の終点が新しいカレントポジションとして自動的に設定されます。

 SWFShapeオブジェクトの図形の設定が終了したら、SWFMovieオブジェクトに図形を追加します。SWFShapeを設定しただけでは、表示されることはありません。実際のムービー上に表示するには、SWFMovieオブジェクトにSWFShapeadd()関数で設定する必要があります。

add()関数
void swfmovie->add ( resource instance )

 instranceには、このSWFMovieオブジェクトに追加する任意のオブジェクトを指定します。SWFShapeを追加することで、SWFShapeオブジェクトが表す図形をムービー上に表示できます。

コード02
<?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 swffont ( string filename )

 filenameには、読み込むフォントの名前を指定します。Mingは、このファイルのフォント定義を読み込んでフォントを利用します。この関数に指定するファイルは、FDBという拡張子のフォント定義を格納するファイルです。FDB形式のファイルを生成するツールも提供されていますが、公式サイトからFDBファイルのセットをダウンロードすることもできます。Mingパッケージを学習するコードを書く場合は、とりあえず公式サイトからフォントをダウンロードすると良いでしょう。

 テキストはSWFTextオブジェクトで表されます。SWFTextは、SWFShapeオブジェクトと同じように、必要なテキストの設定を行った後SWFMovieオブジェクトに追加することでムービー上にテキストを表示できます。SWFTextオブジェクトを作成するにはswfText()コンストラクタを呼び出します。

swfText()コンストラクタ
SWFText swftext ( void )

 取得したSWFTextオブジェクトに対して、フォントや表示する座標、表示するテキストを表す文字列などを設定して、適切に初期化しなければなりません。生成したSWFFontSWFTextに設定するにはsetFont()関数を使います。

setFont()関数
void swftext->setfont ( string font )

 fontには、正しく読み込まれたSWFFontオブジェクトを指定します。

 表示するテキストの色はsetColor()関数で設定できます。

setColor()関数
void swftext->setcolor ( int red, int green, int blue [, int a] )

 redには赤要素、greenには緑要素、blueには青要素、aにはアルファ値を0~255までの範囲でそれぞれ指定します。aは省略可能です。

 表示するテキストの座標はmoveTo()関数で設定します。

moveTo()関数
void swftext->moveto ( int x, int y )

 xにはX座標を、yにはY座標を指定します。この座標には SWFShapeのカレントポジションは存在しません。ムービーの左上隅を原点とする座標です。

 テキストのサイズはsetHeight()関数から設定できます。この関数は現在設定されているフォントの高さを設定するもので、指定した高さから表示されるフォントの大きさが決定されます。

setHeight()関数
void swftext->setheight ( int height )

 heightにはフォントの高さを指定します。

 当然、SWFTextオブジェクトに表示するテキストとなる文字列を設定しなければなりません。テキストを描画するにはaddString()関数を呼び出します。addString()関数は、SWFTextの現在の設定を用いてテキストを描画します。

addString()関数
void swftext->addstring ( string string )

 以上で、テキストを表示するための基本的な設定は終了です。SWFTextオブジェクトを用意することができれば、後はSWFMovieオブジェクトのadd()関数で追加するだけです。

コード03
<?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()関数の戻り値から取得できます。

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()関数に設定します。

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オブジェクトのような塗りつぶしオブジェクトを指定します。数値型で直接色を表すredgreenbluea引数を指定することもできますが、これは、「$swfshape->setLeftFill($swfshape->addFill($red, $green, $blue, $a))」という記述と同義です。

 塗りつぶされるのは、SWFShapeが定義する図形の内部空間です。複数の線が交差し、図形が閉じられている場合はその内部が塗りつぶしの対象となります。例えば、三角形や長方形を描画したい場合は、線の開始座標にカレントポジションを設定し、後はdrawLine()またはdrawLineTo()関数で連続して線を引き、最後に開始点に向かって線を引いて図形を閉じることで、その形の内部が塗りつぶされます。

コード04
<?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オブジェクトを作成し、その内部を赤色で塗りつぶしています。

次のページ
イメージを表示する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

赤坂 玲音(アカサカ レオン)

平成13年度「全国高校生・専門学校生プログラミングコンテスト 高校生プログラミングの部」にて最優秀賞を受賞。2005 年度~ Microsoft Most Variable Professional Visual Developer - Visual C++。プログラミング入門サイト WisdomSoft の管理人。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/706 2006/11/27 00:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング