• ベストアンサー

DXライブラリでの2Dの描画法[RPG作成]

VidualStudio.net C++ DXライブラリでRPGを初めて作成中なのですが、キャラ移動、マップ移動、マップスクロールなど実装したのはいいのですが、ゲームがとても重いです。 CPUの使用状況によってはスムーズな動きをするので、おそらくマップの描画に問題があるのだとおもいますが、マップは32x32ピクセルのものをゲームのスタート時に読み込み、2D配列に格納したintタイプのマップにあわせてDrawGraphイメージハンドルからひとつひとつ描いています。 これでは効率が悪すぎるのでしょうか?それとも初めからすべてマップ情報をメモリにロードするとメモリ不足で結局ディスクから読み込んでいるのでしょうか。(でもそれほどの量はテスト段階ですので扱っていないのですが。。。) もっと効率のいいマップの描き方があれば教えていただきたいのでここに投稿させていただきました。 ちなみに、DXライブラリはここのものを使わせていただいています http://homepage2.nifty.com/natupaji/DxLib/dxdload.html

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

参考になりそうなQ&A:http://okwave.jp/qa4329951.html 要は「マップは予め一枚絵にしておけ」ってことですが。 #描画回数が増えれば増えるほどRAM→VRAMの転送にかかる時間が馬鹿にならなくなります

dkdkabcd
質問者

お礼

なるほど。 参考になりそうです。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

 こんにちは。補足いただきました。  私の勘違いで、的外れな事を書いてしまった様です。読み飛ばして下さい、すんません。

dkdkabcd
質問者

お礼

いえいえ、私も曖昧な質問でしたので。 回答ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.2

 こんばんは。    オフスクリーンA,B共に、VRAM上に確保されている事を前提としますが、加速させるのであるならば、前もって32x32のマップパーツを、オフスクリーンBへタイルの様に並べて置き、2D配列を使用して、オフスクリーンBのマップパーツを参照して、オフスクリーンAに向かって並べれば、速くなると思います。  ↓width = (32x4) height = 32 マップパーツをファイルから読んでタイル状に整列させて一枚絵に仕立てる  オフスクリーンB  ○☆▲■  オフセット位置  ○-0、☆-1、▲-2、■-3  ↓オフスクリーンBのオフセット位置をマップする  int array2d[][]...  11111111  12300001  11111111  10000001  10000001  11111111  12111111  11111111  ↓オフセット位置に対応した絵をオフスクリーンBからオフスクリーンAに向かって転送して埋め尽くす  オフスクリーンA  ☆☆☆☆☆☆☆☆  ☆▲■○○○○☆  ☆☆☆☆☆☆☆☆  ☆○○○○○○☆  ☆○○○○○○☆  ☆☆☆☆☆☆☆☆  ☆▲☆☆☆☆☆☆  ☆☆☆☆☆☆☆☆

dkdkabcd
質問者

補足

こんにちわ。 恥ずかしながら、貴方が何をしているのかよく理解できません。 ええと、今私がやっているのはファイルから整数型2D配列を読み込み、その整数に対応した絵をイメージハンドルを格納した配列を指定して描画する。 つまりファイルから map[][]={ 1,1,1,1,1,1, 2,2,1,1,0,0, 0,0,0,1,1,1, 1,1,1,1,3,3, 0,0,2,3,1,1,} このようなものを2d配列に格納、 イメージファイルから ○☆▲■ を読み込み、イメージハンドルの配列に img[0] = ○、img[1] = ☆、img[2] = ▲、img[3] = ■、 と格納し、 for(i=0;i<;i++){ for(j=0; j<; j++){ DrawGraph(x,y, img[map[i][j]],TRUE) } } みたいな感じでやってます。 なにが具体的に違うか教えてください。再度すみません。

すると、全ての回答が全文表示されます。

関連するQ&A