ゲームのデバッグ情報(自機の座標など)を実際のゲームの画面に出していました。
常に変化し続けるものを確認するためにゲーム画面に描画するのは有効ですが、
例えば、弾を発射した、初期化がミスった、マウスがクリックされた、シーンの切り替えが発生したなどの
一瞬の情報はずっと描画しなくていいですね。
そこで、コンソール(コマンドプロンプトの画面)にログをprintfで出力していく方法を紹介します。
[0回]
AllocConsole();
freopen( "CONOUT$", "w", stdout );
freopen( "CONIN$", "r", stdin );
printf("testです。 %d\n",893 );
ゲームループが始まる前に記述してください。
関数が呼ばれた後からprintfが使えるようになります。
printfをプログラム中のどこに記述しても大丈夫です。
scanfも使えます。(私はエディタで編集するファイル名などの入力で利用。
改行がバッファに残ったりいろいろ面倒なので、
ウインドウ付きのエディタが作れるならそっちを作ったほうが確実にいいです。)
補足1:
#ifndef _DEBUG
#define printf //
#endif
などでReleaseビルド時は通らないようにしておく(他に消し方あったらコメントよろしくです)
補足2:
freopen_sを使ってください。という警告が英語で出る。
対処法として、
1.無視
2.freopen_sを調べて使う
3.警告を出力しないようにする(
#pragma warning( disable : 4996 )
// freopen の警告を出力しない
を.cpp(.hは駄目)に記述する。)
C4996の警告は古い関数使ってるからこっちのが安全性が高いよと◯◯◯_s関数の使用を推してくる。
#pragma warning を決してintからfloatへの変換の警告を消すなどには使ってはいけない。
by リーダ和田
PR
COMMENT
無題
無題
コメントありがとう!
無題
なるほど、こういう方法もあるのか・・・参考になります。
無題
今回示したサンプルは、標準出力がコンソールになります。
printfやcoutなどが使えます。
このfreopenの関数を調べるとログを出力する矛先を
ファイルなどにも利用できるようです。
ゲーム配布時にログをファイルに出力させておいて、
不具合の報告があがったときにそのファイルを送ってもらうようにすれば
デバッグもしやすそうです。
コメントありがとう