みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C言語で作ったゲームがフリーズします

"DxLib.h"とVisual C++ 2008 ExpressEdition(OS:Windows Vista)を用いて格闘ゲームをつくりました。
最初の数十秒は思ったとおりに動くのですが、だんだん画像(キャラクター)の動きが遅くなり、1分をすぎた当たりでほぼフリーズします。下記のとおりにすれば、描写はwhile文を2週回って1度動くので解決できると思いましたが、1分を過ぎたあたりでほぼフリーズします。
どうすればスムーズに動くのでしょうか?

動く部分の大まかなソース
while(){
int i=0;
Controller(~); //ここでキーボードからの入力を受け付けて

if( i==0 ){
DrawGraph(~);
i++;
}

else{
i=0;
}
}

投稿日時 - 2011-06-12 13:44:57

QNo.6804073

すぐに回答ほしいです

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

LoadGraph()がずっと呼び続けられている可能性が高いように思います。
もし、タスクマネージャで調べて最初に比べて重くなったときに消費メモリが増えているのなら、ほぼこれでしょう。
※ mallocをむちゃくちゃしている可能性もありますが。

投稿日時 - 2011-06-12 16:50:48

お礼

ありがとうございます。
DrawGraphの仮引数にLoadGraph("ファイル名")を直接渡していました。(1度しか使わないのでハンドルを代入する変数は用意していませんでした。)
ハンドルを代入する変数を用意したことで順調に進みました。
これからもよろしくお願いします。

投稿日時 - 2011-06-12 21:25:06

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

時間でだんだん遅くなるということで、なにか負荷になるものが増えつづけている状態だと思われます。
・メモリの確保と解放
・ハンドルの確保と解放
・メッセージの送信と処理
・スレッドの作成と停止
といったあたりの不一致が思いつきます。

・デバッガで追い掛ける
・使っている関数の説明等をよく読んで、使い方が間違ってないか確認する
使用後になんらかの操作が必要なら、マニュアルに書いてあるはず
・タスクマネージャを使って、メモリや負荷が増えつづけていないか確認する。
できれば、高機能のもの(Process Explorer等)でより詳しく確認する

というあたりもやってみましょう

投稿日時 - 2011-06-12 16:00:27

お礼

ありがとうございます。
タスクマネージャーの使用で解決しました。
これからもよろしくお願いします。

投稿日時 - 2011-06-12 21:20:44

int i=0;ってwhile文の前につけるのではないでしょうか?
ずっとi=0→if文true→DrawGraphのままのような気がしますが・・・

投稿日時 - 2011-06-12 14:00:15

補足

ありがとうございます。
こちらに記載する際に間違っていました。
プログラムソースの方ではwhile文の前になっています。
その他はどのようなことに気をつければいいのでしょうか?
よろしくお願いします。

投稿日時 - 2011-06-12 15:20:08

あなたにオススメの質問