デバック用の表示関数

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kusen

デバック用の表示関数

#1

投稿記事 by kusen » 15年前

シーンごとにソースを管理しております。

各ページにDebFがtrueの時だけ
変数の値を表示できるようにプログラムを書いております。

最近これが手間になって来ました。
毎ページDebFを宣言したりするのが面倒です・・・。
これを関数にまとめられないでしょうか?

例えば
DebText("%d",Px);
DebText("%d",Py);
DebText("%d",HitF);
と書くだけで自動的にX座標は0、Y座標は(DebText呼んだ回数-1)*FONT_SIZE
みたいにしたいです。

シーンのソースにはDebTextのプロトコル宣言等もしたくないです・・・。
 (ヘッダインクルードならOK)
調べてみるとexternを使うと出来る様なことが書いてあったのですが
よく理解できませんでした。

opening.cpp … オープニング
title.cpp … タイトルシーン
main.cpp … ここでシーンを呼んでます。

FONT_SIZE には文字のサイズが定義されております。
if(DebF){
    DrawFormatString(0,0,RGB(0x00,0x00,0x00),"%d",Px);
    DrawFormatString(0,FONT_SIZE,RGB(0x00,0x00,0x00),"%d",Py);
    DrawFormatString(0,FONT_SIZE*2,RGB(0x00,0x00,0x00),"HitF = %d",HitF);
}

Justy

Re:デバック用の表示関数

#2

投稿記事 by Justy » 15年前

>DebF
 DebFって #defineですか?


>これを関数にまとめられないでしょうか?

 DebText関数はフォーマット付の文字列だけを指定していますが、それに加えて
"キー"の情報も引数に加えて、関数が呼ばれたら内部でキーと文字列を保存します。

DebText("Test", "%d", Px);

 出来ればキーに対応した文字列リストという形で保存し、同じキーは同じリストに
追加するようにします。

 で、後はキーごとに表示するかどうかを別途指定して、フレームの最後でリストを
辿って一気に表示します。

 指定するキーをソース毎に統一しておけばソース毎に表示・非表示を切り替えられる、
というわけです。


 こんな感じのでよければ、とりあえず下の5つの関数があればいいでしょう。

// デバッグ用表示文字列の指定
void DebText(const char *key, const char *format, ...);

// デバッグ用表示するキーの指定と取得
void DebText_SetDisplayKey(const char *key, bool disp);
bool DebText_IsDisplayKey(const char *key);

// デバッグ文字列のクリア
void DebText_Clear();

// デバッグ文字列を表示
void DebText_Draw();


 クリア関数は内部で保存していたキーが持っている文字列リストだけをクリアします。
 キーの表示・非表示情報は消しません。

 これはどこかで文字列をリストをクリアしないと過去に指定した文字列が延々と残ってしまうのを
 避けるためですが、普通は表示したら不要になるので、DebText_Draw関数内部で表示が終わったら
勝手にクリアしてしまってもいいのかもしれません。

 適当に書いたサンプルを挙げると

DebText_SetDisplayKey("AAA", false);
DebText_SetDisplayKey("BBB", true);
while(!DxLib::ProcessMessage())
{
DxLib::ClearDrawScreen();
DebText_Clear();

// aaa.cpp
DebText("AAA", "%d", Px);
DebText("AAA", "%d", Py);

// bbb.cpp
DebText("BBB", "%d", HitF);

DebText_Draw();
DxLib::ScreenFlip();
}

となっていたら、"BBB"のキーを指定した変数 HitFしか表示されない、というわけです。


 これならヘッダインクルードだけでOKですし、キーボードなどのイベントで、或いはシーンが変わる毎に
動的に ON/OFFを切り替えられます。

 こんな感じの仕組みならでまとめておく、というのはどうでしょう?

閉鎖

“C言語何でも質問掲示板” へ戻る