トップページ > 過去ログ > 記事閲覧
[RPG作成]動きが遅い
名前:DQ風RPGを作成中です 日時: 2008/10/21 11:14

DXライブラリを使用させていただき、DQ風RPGをVisualStudio.Net2008で作成中です。 マップの描画、マップのスクロール、キャラ動作、マップ移動など実装しました。(他にもコマンドウインドウやNPCと会話、樽からアイテムなど) 普通にマップ上を歩いているとき、キャラの動きがとても遅いです。 キャラの動きだけ実装したときに比べて約二倍遅いです。 マップの描画法に問題があるのでしょうか? マップは、ゲーム開始時に32x32のマップチップをまとめたものをすべてDivLoadGraphでイメージハンドルに格納し、 その32x32ピクセルの小さなマップをひとつひとつInt型2D配列に従い、DrawGraphで描画しています。 マップは2レイヤーで、キャラもまたそれに重ねて描いています。 改善法はあるでしょうか?? ちなみに私のPCスペックは CPU 1.73GHz, 512memory, WindowsXP です。 2.4Ghz DualCore, 2.0GBmemory, WindowsVistaでもテストしましたが、動きは普通なものの、CPUの使用量がほぼ100%という結果でした。これは問題アリですよね?

Page: 1 |

Re: [RPG作成]動きが遅い ( No.1 )
名前: 日時:2008/10/21 11:17

> マップの描画法に問題があるのでしょうか? といわれてもコードが無いのでは なんともいえません。 上記に貴方がどの様に実装したいのかは 分かりましたが、実際にそうなっているという 確証はこちらからはみえませんし。 とりあえず、バックバッファを使用して チップを1つ1つ描画する際に、チップひとつに ついてフリップしたりしていませんか? { int i,j; int handle[256][256]; for(i=0;i<256;i++) {  DivLoadGraph(/*割愛*/); } for(i=0;i<256;i++) {  for(j=0;j<256;j++)  {   DrawGraph(handle[i],/*ほげほげ*/);   ScreenFlip();  } } } こんな感じにしているとすごい時間をとられます。 #コードが無いので推測の域をでませんが。
Re: [RPG作成]動きが遅い ( No.2 )
名前:DQ風RPGを作成中です 日時:2008/10/21 12:10

回答ありがとうございます。 RPGゲームを作るのは初めてなので、 これだけの実装ですでに15個以上のcppファイルにずらずらコードしてるのでここに載せるのは難しいですが、 いちいちスクリーンフリップをしているということはありません。 一度のループに一度だけフリップしてその間にDrawGraph関数で20x15個32x32ピクセルの画像を描画しています。 ゲーム開始時にすべてのチップをロードしているのが問題なのでしょうか?? マップを変えるごとにそのマップで使うイメージをロードしたほうがいいのでしょうか。そのほうがキャッシュを効率よく使えて早くなるということはありますか?? それともやはり32x32を一個ずつ描くのが良くないのでしょうか。。
Re: [RPG作成]動きが遅い ( No.3 )
名前: 日時:2008/10/21 13:44

そのあたりの実装方法は自分の好みで決めて 良いと思いますが。。。? 遅いというのは使用するに堪えないほどに 遅いのでしょうか? ボトルネックになっている部分を探さずに、 闇雲に修正してもバグを作りこむだけですし 劇的に早くなることも無いでしょう。 まずは、どこに時間が掛かっているのか、 予測では無く実測を取ることが必要です。 こういう修正は、机上では論外です。 処理の区切りにどこでどれくらい時間が 掛かっているのか画面に出してみると いいと思います。 #ソースコードもアップする方法は幾らでも #有りますし、有名なところならMSNでだって #無償で5Gまでファイルアップ出来るわけですし。 私はコードが汚かったりするので、 あまり公開したくない気持ちも分かりますが :−p DXライブラリ自体がそれなりに重いので その辺りも影響しているかもしれません。 #蛇促ですが、BBSへのマルチポストはあまり #しないほうがいいですよ。 #双方のBBSが禁止してなければ良いですが、 #回答者がつき難くなるので。
Re: [RPG作成]動きが遅い ( No.4 )
名前:DQ風RPGを作成中です 日時:2008/10/21 14:23

回答ありがとうございます。 ゲームとしてなりたたないほど遅かったので、なにか基本的な考え方が間違っているのでは、 と思い質問させていただきましたが、もう少し自分でいろいろ調べてみることにします。 あと、迷惑ついでにRPGのソースコードの良い参考になるサイトなど知っていれば教えていただけると幸いです。(できたら簡単なテスト用ではなくある程度作りこまれたもので) 色々ありがとうございました。
Re: [RPG作成]動きが遅い ( No.5 )
名前: 日時:2008/10/21 15:30

>ゲームとしてなりたたないほど遅かったので これはDebug版のものでしょうか? まぁ、Release版でもあまり大差は 無いかもしれませんが若干早くなるかも。。。 >基本的な考え方が間違っているのでは 実装方法についての考え方は人それぞれですが、 質問を見る限り間違っているとは思いません。 私が言っているのは思っているコードと 実際のコードでは違っているかも知れないですよ ということです。 #そういう意味でコードを見れる人が周りにいるなら #その人に見てもらったりするほうが良いでしょう。 >RPGのソースコードの良い参考になるサイト 完成度の高い物を公開している方がどれほど 居るかというところでも有りますが、 サイトよりは書籍をあさったほうが早いかも。 #どちらにしてもサンプル程度になるかも DXライブラリを使用していないですが、 DQ風オンラインゲームの完成版を 公開されている方もいます。 ttp://uraran.jp/dqo/dqo_spec.htm
Re: [RPG作成]動きが遅い ( No.6 )
名前:ライブラリ使用者 日時:2008/10/21 22:01

以前、私も気になった所ではあったんで、今更ながらに少し確認してみました。 DrawGraph()をループで回数増やしながら動作させてみた結果、640×480では300回ほどで16ms※超え。 71×67では3300回ほどで16ms※超えの結果になりました。 条件的には、Core2DuoT5500(1.6GHz) 画像はBMP1種、描画位置もすべて同じ 16ms=60FPS(Hz)環境 今回は、20x15個32x32の描画ということで300回ほど1ループで回してる計算ですね。 こちらの結果からの推察ですが、マップ配列の呼び出しなどの部分で大分ロスしているのではないでしょうか? まだ毎回300回の描画は厳しいのかもしれませんので、まず始めに1枚絵をマップチップから作成しておき、それを使うというのも手かと思います。
Re: [RPG作成]動きが遅い ( No.7 )
名前:YKN 日時:2008/10/21 22:55

私はCPU1.3G メモリ2G Windows2000でそれ以上の事をやってるけど 普通にバリバリ動いてます。 多分考えてるとことは別のところに原因があるんじゃないかな。 処理に時間が掛かるのはやはり描画だから、 例えば画面外の見えない部分のマップも 描画処理してるとか。
Re: [RPG作成]動きが遅い ( No.8 )
名前:DQ風RPGを作成中です 日時:2008/10/22 02:51

みなさん助言ありがとうございます。 画面外の見えない部分はスクロール用に左右上下1マス分しか描画していません。 やはり他のところに問題がありそうですね。ひとつひとつじっくり見てみます。 >通さん  サイト見てみますね。コードも自分が思ったとおりに実装できているか再度見直します。 ありがとうございました。 >ライブラリ使用者さん  わざわざテストして結果報告していただき、ありがとうございました。まずは一枚絵でしてみるのもいいかもしれませんね。試してみます。 >YKNさん  マップの描画法には特に問題なさそうなので、他のところをもっとちゃんと見直してみます。 ありがとうございました。

Page: 1 |