背景を作る

まず、背景用CGを用意します。

まず背景用のでーっかいCGを作るのは余りにも非効率なのでやめます。
ゲーム画面に、まっぷにあわせてここには草、ここには木、というように判断しながらいろいろなCGのパーツを書込んでいきます。

マップが違うと別な背景になります。
パーツが違ってもやはり違う背景になるでしょう。

では背景で使うパーツを作りましょう。

32*32で、土(道)、草原、岩、水の4つを作ります。

説明用なので、すごくシンプルです。

作るためにはグラフィックソフトを使う必要があります。
ゲームプログラマを目指しているからにはグラフィックソフトの一つや二つ扱えないと困ることもあります。

使ったことの無い人は、ここで使ってみましょう。

出来たら4つのCGを横一列にならべて1枚のCGにします。
できない人と、面倒くさがりやさんは、はサンプルを使って下さい。

グラフィックを読み込むと同じようにリソースに入れてからビットマップに読み込みます。

サンプルで使うマップは適当に作りましょう。
草原のなかに道と木と池があるようなモノです。

パーツを増やすと緻密な背景になります。

前回やったように、OnDraw()の中に書いても良いのですが、あとあと面倒なことになるので、別な関数を作りましょう。
あとでクラスに変更することも視野にいれながらやります。

まず、どのクラスのメンバ関数にするか決めます。
どこからでも呼べる関数にする手もありますが、ここではメンバ関数にしておきます。

アプリケーションの名前が rpg だとすると、メインのウィンドウは、rpgView になっているはずです。
ファイルビューで見ると、rpgVIew.h と、rpgView.cpp の二つのrpgView ファイルがあります。

h という拡張子が付いたファイルがヘッダファイルでしたね

まず、このヘッダファイルの中で、これから作る関数をメンバ関数として宣言します。
一応 DrawBack(); という関数にします。
背景を書くだけでその他の機能がなにもありませんが、あとで拡張しましょう。

rpgView.h の中には rpgView クラスの宣言が書かれています。
この中の インプリメンテーションと書かれた public 部分に

void DrawBack(CDC* pDC); 

と宣言します。

本体は、

rpgView.cpp の中に書きます。

だいたいこんな感じになります。
マップにあわせてCGをコピーするだけの単純な関数です。
 

 void CRpgView::DrawBack(CDC* pDC)
 {
 CBitmap Bitmap;
 int back[7][12]={
  {2,2,2,2,1,1,1,1,2,2,2,2}, // 1=草
  {1,1,1,1,2,2,2,2,1,1,1,1}, // 2=木
  {1,1,1,1,1,1,1,1,1,1,1,1}, // 3=岩
  {1,1,1,1,1,1,1,1,4,4,4,4}, // 4=水
  {1,1,3,1,1,1,1,1,4,4,4,4},
  {1,3,3,3,1,1,1,1,1,4,4,4},
  {3,3,3,3,3,1,1,1,1,1,1,1} };
 
 int i,j;
 
 CDC DC;
 DC.CreateCompatibleDC(0);
 Bitmap.LoadBitmap(IDB_BITMAP1);
 DC.SelectObject(Bitmap);
 
 for(i=0;i<=6;i++)
  for(j=0;j<=11;j++)
    pDC->BitBlt(j*32,i*32,
    32,32,
    &DC,
    (back[i][j] -1 ) * 32,0,
    SRCCOPY);
 }
 

と書いてある関数があります。

そのなかに以下のコードを打ち込んで下さい。

 実際に描画を行うのはOnDraw()です。             2001-6-24 更新
 OnDraw()から背景描画を呼び出します。
 

 void CRpgView::OnDraw(CDC* pDC)
 {
  // TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
  DrawBack(pDC);
  MoveChara(pDC, posi_x, posi_y);
 }
 

大きなマップの場合は手で打ち込むのが大変なので、マップエディタを作ります。
画面をみながらパーツを置いていってそれをデータをしてセーブする、というようなプログラムです。

マップエディタに限らず、開発用のツールをちょこちょこ作るのはプロの現場ではふつうに行われています。