■このe-BOOKの目的 ゲームプログラムの一部を紹介し、「何となくプログラムを分かってもらう」ことが目的です。 また、これを知ることで、パソコン自体への理解も深まると思います。 パソコン用語などの基本説明は省いてますので、分からない部分は自身で調べてください^^ 「画像を画面に表示するには」 今回は、2Dの絵を2Dの画面へ、独自の処理で描画する例です。 (3Dゲームの場合も、独自で描く場合は必要な基礎知識です) 色数が256色、画面サイズが640×480ドットのゲームで考えてみます。 ※スタジオギウのゲームでは、アヴァリスやヴァスタークロウズがこの環境で動作しています。 256色のゲーム画面に必要なデータは、 ・256個×3バイトのパレット。 ・640×480×1バイトの描画マップ。 ・任意サイズ×1バイトのドット絵(描画するキャラ絵など) です。 ※因みに、1バイトは、「0〜255までの値を1個だけ格納できるデータ領域」です。 1個のパレットには、3バイトの色情報がRGB(赤、緑、青)の順に入っていて、 例えば、(0,0,0)なら黒色、(255,0,0)なら赤色、(0,255,0)なら緑色、(255,255,0)なら黄色になります。 ※まずは、何となく分かればOKです^^ このパレットが、256個(0番〜255番まで)あるのが、256色のゲームです。 描画マップは、640×480×1バイトなので、合計 307,200バイトの領域が確保されています。 この描画マップの全てに、「パレット番号」が入っています。 例えば、画面を真っ黒にしたい場合、 0番のパレットを、黒色(0,0,0)にして、描画マップを0で塗りつぶせばOKです。 画面を真っ黒にした時の描画マップ(640×480)の中身↓ 0,0,0,0,0,・・・,0, (横1行は640バイト) 0,0,0,0,0,・・・,0, : : (縦は480列) 次に、画面の左上の1ドットに、赤色(255,0,0)の点を付けてみます。 画面の左上は、描画マップの左上なので、 1番パレットを赤色(255,0,0)にして、 1,0,0,0,0,・・・,0, 0,0,0,0,0,・・・,0, : : という感じで、描画マップの左上に 1 を入れれば、1番パレットは赤色なので、画面の左上に赤い点が付きます。 ここまで、雰囲気は掴めたでしょうか? (詳細を省いてますので、何となく分かればOKです^^) 次に、この描画マップへ、「ドット絵」を描いてみましょう。 ドット絵も同じように、マップとパレットの情報を持っています。 ※ゲーム画面(描画マップ)のパレットと、ドット絵のパレットが異なると色が変わってしまうので、通常は同じパレットを使用します。 ドット絵のマップデータは、2×2のサイズで↓だとします。 20,50, 12,80, これを、画面の左上(x = 0, y = 0)の位置に描画するには、 20,50,0,0,0,・・・,0, 12,80,0,0,0,・・・,0, 0, 0,0,0,0,・・・,0, : という感じで、値をそのままコピーすればOKです^^ 但し、実際にプログラムでコピーするには、横が640バイトあることを考慮しないといけません。 ※実際の描画マップは、2次元の線(ビデオテープみたいな感じ)でデータを格納しているので。 仮に、 ・描画マップの表記を map ・ドット絵の表記を dot として、[ ] 内の番号で、マップ内の位置を示すこととします。 ※mapは、上に書いた、307,200バイトなので、map[0]〜map[307199]まであります。 (dotは 4バイトなので、dot[0]〜dot[3]まで) ※map[0]が画面左上で、map[307199]が画面右下となります。 描画マップの左上に、ドット絵を描画するプログラムは、 map[0] に dot[0] の値を入れる。 map[1] に dot[1] の値を入れる。 map[640] に dot[2] の値を入れる。 map[641] に dot[3] の値を入れる。 となります。 上記をC言語(ゲームでよく使われてるプログラム言語)で書くと、ほぼそのまま、 map[0] = dot[0]; map[1] = dot[1]; map[640] = dot[2]; map[641] = dot[3]; という感じです^^ 如何でしょう、何となく分かって頂けたでしょうか? けど、これだと大きい絵を描画するのが大変ですよね。 ということで、次回は「大きい絵を描画するには」を書いてみたいと思います^^ Web公開:2009年 4月5日 StudioGIW(スタジオギウ) / M.Sekiya |