解決済みの質問

質問No.4417774
困ってます
困ってます
お気に入り投稿に追加する (0人が追加しました)
回答数3
閲覧数800
DXライブラリでの2Dの描画法[RPG作成]
VidualStudio.net C++ DXライブラリでRPGを初めて作成中なのですが、キャラ移動、マップ移動、マップスクロールなど実装したのはいいのですが、ゲームがとても重いです。

CPUの使用状況によってはスムーズな動きをするので、おそらくマップの描画に問題があるのだとおもいますが、マップは32x32ピクセルのものをゲームのスタート時に読み込み、2D配列に格納したintタイプのマップにあわせてDrawGraphイメージハンドルからひとつひとつ描いています。

これでは効率が悪すぎるのでしょうか?それとも初めからすべてマップ情報をメモリにロードするとメモリ不足で結局ディスクから読み込んでいるのでしょうか。(でもそれほどの量はテスト段階ですので扱っていないのですが。。。)
もっと効率のいいマップの描き方があれば教えていただきたいのでここに投稿させていただきました。

ちなみに、DXライブラリはここのものを使わせていただいています
http://homepage2.nifty.com/natupaji/DxLib/dxdload.html
投稿日時 - 2008-10-21 10:24:29

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

回答No.1
参考になりそうなQ&A:http://okwave.jp/qa4329951.html

要は「マップは予め一枚絵にしておけ」ってことですが。
#描画回数が増えれば増えるほどRAM→VRAMの転送にかかる時間が馬鹿にならなくなります
投稿日時 - 2008-10-21 17:37:54
この回答を支持する
(現在1人が支持しています)
お礼
なるほど。
参考になりそうです。ありがとうございました。
投稿日時 - 2008-10-22 08:39:03
この質問は役に立ちましたか?
2人が「このQ&Aが役に立った」と投票しています

ベストアンサー以外の回答 (2)

回答No.3
 こんにちは。補足いただきました。
 私の勘違いで、的外れな事を書いてしまった様です。読み飛ばして下さい、すんません。
投稿日時 - 2008-10-22 10:09:39
この回答を支持する
(現在0人が支持しています)
お礼
いえいえ、私も曖昧な質問でしたので。

回答ありがとうございました。
投稿日時 - 2008-10-22 22:19:26
回答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
 ☆☆☆☆☆☆☆☆
 ☆▲■○○○○☆
 ☆☆☆☆☆☆☆☆
 ☆○○○○○○☆
 ☆○○○○○○☆
 ☆☆☆☆☆☆☆☆
 ☆▲☆☆☆☆☆☆
 ☆☆☆☆☆☆☆☆
投稿日時 - 2008-10-21 20:08:58
この回答を支持する
(現在0人が支持しています)
補足
こんにちわ。

恥ずかしながら、貴方が何をしているのかよく理解できません。

ええと、今私がやっているのはファイルから整数型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)
}
}
みたいな感じでやってます。

なにが具体的に違うか教えてください。再度すみません。
投稿日時 - 2008-10-22 03:02:29
別のキーワードで再検索する
もっと聞いてみる

関連するQ&A

回答募集中

この他の関連するQ&Aをキーワードで探す

-PR-

OKWaveのおすすめ情報

特集

同じカテゴリの人気Q&Aランキング

カテゴリ
C・C++

回答のついた最新のQ&A

-PR-

ピックアップ

ノウハウ共有サイト

-PR-
-PR-