![]() |
09. パターン描画1 イメージ分割 |
![]() |
|---|
以前一枚絵の表示を書きましたがゲームでは一枚絵だけで構成されているわけではありませんよね スプライト描画も描きましたがJ-PHONE専用だったり手間がかかったりで もう少し簡単に使いたいものです。 かといってパターン毎に画像を一枚ずつ用意しておくのは容量が膨れ上がります。 そこで一枚絵から部分的に抜き出して描画できれば画像を格納するのが 1枚で済み非常に効率が良いですね iアプリ(504)ではパターンの部分指定をして描画できるdrawImage命令がありますが MIDPにはありません。 今回はMIDPで動作を再現する方法を書きます。 まず画像パターンを敷き詰めた一枚絵を用意します。RPG風のマップパーツが並んでいますね これを各パーツ毎に貼り付けてRPGなんかのマップは作られています。 しかしこのままでは使えないので分割しなければいけません 分割するのには一枚絵を新しいイメージに部分的にコピーします。 Image NewImg = createImage(int width,int height) この命令で新しくサイズを指定してイメージを作成できます。 そして新しく作成したこのイメージには描画する事が出来ます。 一枚絵の画像をここにパーツ毎に分けて置いて行き,使う時は NewImgを使うようにすればパーツ指定で描画できるようになります。 どうやってパーツ指定でNewImgに書き込むかというと 新規で作成したイメージが16x16の場合 32x32の画像なら収まりきりませんね これを左上始点で描くと左上の16x16が描かれますが
(赤い部分が新しく作成したイメージで斜線が書き込むイメージ) 書き込む初期位置をずらして-16にしておくと
(緑が新しく作成したイメージで斜線が書き込むイメージ) と言うように右上の部分がNewImgに書き込まれます。 これははみ出た部分は描画されないという原理を利用して, 必要な部分が新しいイメージの部分の来るようにずらして描画しています。 この原理を利用して各パーツ毎に一枚絵から 部分指定してコピーしていけば パーツごとの画像が得られます。 これをパーツ数分繰り返せば無事にパーツごとのイメージが作成されます。 後はどのパーツを表示するかは自由ですね。(^^) これをした後は元イメージ(一枚絵)は解放しても構いません。