内部の変数を表示する関数が学校のライブラリについていたため、それを使用したんですが、フォントのサイズを変更する機能をつけたかったので、少し自分なりにアレンジしてみたんですが
//------------------------------------------------------------------------
// ■出力フォーマット指定可能な文字列の描画 // 2009.06.07 追加
// ※表示位置,文字色の指定あり.変数の値を表示することができる.
// 下記は文字色が入力されなかった場合
//
// 宣 言) bool DrawPrintf(char font, int x, int y, int size, D3DCOLOR color, char *szFormat, ...);
//
// 引 数) x, y : 表示位置
// size : 文字のサイズ
// color : 文字列の色
// szFormat : 出力書式
// ... : 変数の並び
//
// 戻り値) 生成された文字数(終端の null 文字は含まれません)
// (エラー時:負の値)
//------------------------------------------------------------------------
int DrawPrintf(int x, int y, int size, D3DCOLOR color, char *szFormat, ...)
{
char szText[1024]; // 描画文字列
RECT rect; // 矩形
int nLength; // 文字数
// 文字列の生成
va_list va;
va_start( va, szFormat );
nLength = vsprintf( szText, szFormat, va);
va_end( va );
// フォントの初期化
D3DXFONT_DESC fd;
fd.Height = size;
fd.Width = 0;
fd.Weight = 0;
fd.MipLevels = 0;
fd.Italic = FALSE;
fd.CharSet = SHIFTJIS_CHARSET;
fd.OutputPrecision = 0;
fd.Quality = 0;
fd.PitchAndFamily = FIXED_PITCH;
strcpy(fd.FaceName, "MS ゴシック");
D3DXCreateFontIndirect( g_pd3dDevice, &fd, &g_pD3DXFont);
// 文字列の描画
SetRect( &rect, x, y, WINDOW_WIDTH, WINDOW_HEIGHT );
g_pD3DXFont->DrawText( NULL, szText, -1, &rect, DT_LEFT, color );
// 戻すためにまた初期化(メモリ関係で毎回解放する)
D3ReleaseFont();
D3InitFont();
return nLength;
}
1、変数の定義2、文字列の生成
3、フォントのサイズを変更(フォント情報の初期化。多分いらない初期化もある)
4、文字列の描写
5、メモリの解放
6、フォントまた定義(?)
という手順を関数内で踏んでいます。
5が無くても実行はできたんですが、メモリ消費量がちょっとシャレにならなかったので追加してみたところ、重くなる問題はクリアできたのでそれ以降追加してあります
そして今回の質問の本題なんですが、何回かループを繰り返すとフォントがおかしくなってしまいます
具体的には、フォントの大きさが戻ってしまうんですが、初めの5秒間くらいは要望通りに表示してくれているため、対処に困っています
OSはXP、言語はC++です
どなたかお力添えのほど、よろしくお願いします