graphics.drawGraphicsData (4)
2009/06/08 19:54 - AS3.0
今回は、lineTo を使った場合と drawGraphicsData を使った場合での、線の描かれ方に若干の違いがあるということについて。
まずは moveTo、lineTo を使った場合について見てみます。
上記のように moveTo、lineTo を使ってパスを描画した場合、以下のような SWF になります。
上記の moveTo、lineTo の部分をそのまま drawGraphicsData に移し替えると下記のようになりますね。
commands には MOVE_TO が1つと LINE_TO が2つ。 data には3つの座標分の6個の値を格納します。
これをコンパイルすると以下のような SWF になります。
見てのとおり、moveTo、lineTo を使った場合と異なり、線が閉じません。
ということは、線を閉じたシェイプを描きたい場合、下記のようにコーディングせよ、というわけですね。
commands には MOVE_TO が1つと LINE_TO が3つ。 data には三つの座標分の6個の値に加えて、最初の座標分の2個を最後に格納。
moveTo、lineTo の場合と比較すると、commands と data にそれぞれ1つ分ずつ余計に要素を格納する必要があるわけです。
タイプ数が増えてメンドくさいなあと思う前にちょっと待ってください。
MOVE_TO は描画開始位置への移動であり、LINE_TO は線を引く行動です。 描きたい図形の線は3本です。 移動が1回、線3本なら、MOVE_TO 1つに LINE_TO 3つというのは極めて合理的な記述ですよね。
LINE_TO は lineTo と同じものですが、lineTo は引数の座標を終端として線を引くメソッドです。 指定するのが終端座標ということは、3本目の線を引く lineTo の引数として指定しなければならないのは、この図形の開始座標です。 よって data にはのべ4座標分8個の値を格納するのは当然の成り行きというもの。
上記のコードをコンパイルしてできた SWF は以下のようになります。 このようにコーディングすることで、最初の SWF と同じ、線が閉じた図形を描くことができるわけです。
関連エントリー