

昔のゲームでドット絵のドラクエやポケモンのような2DのRPGゲームをC++で再現したいのですが、わからないことがあります。

  * マップの表示
  * マップに重ねてキャラクターの表示

ドット絵のマップ画像を作ってそれの上にキャラを表示すればいいのでしょうか？  
根本的なところがわからず、停滞しております。

教えていただけると助かります、宜しくお願いします。


CC BY-SA 3.0
2015-03-04T06:06:45.467
7421
2015-03-19T17:15:20.367
2015-03-04T07:45:17.863
7926
8674
question
c++ macos game-development opengl
2Dゲームのマップ表示とキャラクターの重ね合わせについて


[床井研究室](http://marina.sys.wakayama-u.ac.jp/~tokoi/)の Web サイトは OpenGL
の初心者にお勧めです。

やり方が分からない時は、まず小さな事柄に分解して考えたり、試してみましょう。

まずは OpenGL 上で絵を 2 枚表示してみてください。  
そのうち 1 枚の絵をキーボードの上下左右から操作できるようにしてみてください。  
何のキーが押されたかは OS が標準で備えている API から取得することができます。

キーで絵を移動できれば、もう一枚の絵に重ねることが可能ですよね。  
キーで動かした絵が上に来ましたか？ それとも動いてない絵のほうが上に来ましたか？

ここまで組んでみると何が分からないのかわかってくると思いますよ。


CC BY-SA 3.0
2015-03-04T07:32:16.577
7425
2015-03-04T07:32:16.577
7926
7421
answer


古典的な方法(OpenGLやDirect3Dによらない)の場合、移動するキャラクタをスプライトなどと呼んでいましたが、当時のゲーム機にはスプライトを管理するハード機能があったため、背景(マップ)との重ね合わせについて取り分け注意する必要はありませんでした。  
Windows等でスプライト的な処理を行う場合、背景等キャラクタによって上書きされるイメージは事前に保持しておかなければならないです。場合によっては別のキャラクタで上書きされることもあります。これはWindowsのDIBやDirectDrawを用いた場合も基本的には変わりません。

ただし、現在のPCは潤沢な(ビデオ)メモリと高速なGPU、CPUが用いられるため、画面の一部のみを保持しておく必要はなく、画面全体をリフレッシュ(再描画)するということで十分なパフォーマンスが保てます。

DirectDrawやDIBや古典的手法では、背景とキャラクタのマスクを作成し、そのマスクにキャラクタを透過して重ね合わせるという方法が用いられます。  
古いPCでも単純なビット演算で計算できるため、よく使われました。透過色を設定して合成する方法です。

* * *

OpenGLやDirect3Dには2D用ライブラリがありますが、3D描画を正面から投射して2Dに見せている都合、GPUを用いて高速で単純なスプライト処理が出来るようですけど。


CC BY-SA 3.0
2015-03-19T17:15:20.367
8153
2015-03-19T17:15:20.367
7966
7421
answer