ゲームを作るのに一番重要なのは「ゲームを作るんだ」という情熱だそうで、ゲーム作りには面倒な作業が多いので、情熱をもってやらないと続かないのだそうです。
画面描画
SDLにはSurfaceという概念があります。Surfaceとは、絵をかいたりできる描画エリアだと思ってください。
Windowもタイトルバーを除いた部分がSurfaceで、Window Surfaceと呼ばれます。Window Surfaceに絵を描くことによって、画面表示ができる。こういう仕組みなんですね。
画面描画手順
以下の手順を踏めば、画面描画できます。
- Window Surfaceに描画する。
- SDL_UpdateWindowSurface()を呼んで、画面表示を更新する。
画面描画例
四角形(長方形)を描画して、描画手順を試してみましょう。
まず、Window Surfaceを取得します。これがないと描画できません。
SDL_Surface* windowSurface = SDL_GetWindowSurface(window);
なお、SDL_Surfaceは通常は使い終わったらSDL_FreeSurface()で破棄しますが、Window Surfaceだけは破棄してはいけません。SDL_DestroyWindow()で自動的に破棄されます。
次に、長方形の位置と大きさを決めます。(50, 100)の位置に、幅60、高さ40の長方形を描くことにします。
SDL_Rectというオブジェクトを作成します。これは構造体で、xとyの座標、幅(w)、高さ(h)の値を持っています。
なので、以下のコマンドでSDL_Rectを作成します。
SDL_Rect rect = { .x = 50, .y = 100, .w = 60, .h = 40 };
続いて、Window Surface上に、「rect」の位置に長方形を描きます。SDL_FillRectを使います。
SDL_FillRect(windowSurface, &rect, SDL_MapRGB(windowSurface->format, 0x00, 0x00, 0xFF));
「&」だったり、「->」だったり、変な記号がありますが、とりあえずスルーします。この辺も「ポインタ」がらみの話です。ポインタは初心者泣かせと言いますが、このようにいたるところに出てくるので避けては通れないのです。
最後に、SDL_UpdateWindowSurface()で、画面を更新します。
SDL_UpdateWindowSurface(window);
これで完成です。
ここまでの内容を、SDL_CreateWindow()と、whileループの間に書いて実行してみましょう。
なんか中途半端な位置に四角が描画されました。パラメータが適当なので、しょうがないですが・・・。
気に入らない人は、以下のパラメータをいじれば、納得のいく「長方形描画」が追求できるでしょう。
- SDL_Rectのパラメータを変更する:長方形の位置と大きさが変わる
- SDL_MapRGB()の末尾3つのパラメータを変更する:長方形の色が変わる
SDL_MapRGB()の色指定は、RGBの順に並んでいます。すなわち、
- 最後から3つ目の数字を大きくすれば赤くなり
- 最後から2つ目の数字を大きくすれば緑になり
- 一番最後の数字を大きくすれば青くなります
今は、一番最後の数値が最高の値(0xFF = 255)なので、青い長方形になっています。(0xFF, 0x00, 0x00)なら赤い長方形になるわけです。(0xFF, 0xFF, 0x00)なら、赤と緑が混ざって黄色、(0xFF, 0xFF, 0xFF)なら、白になります。
※ 光の合成なので、絵の具を混ぜたときと逆に明るくなるのに注意してください。
つづく
参考サイト
- SDL(Simple DirectMedia Layer)公式サイト
- SDL Wiki ← リファレンスマニュアルとかはこちら