趣味でDirectXでゲームを作っているのですが、デバッグのためゲーム画面に変数の値を表示しているのですが文字の色が背景やキャラクターの色と重なって見えません。
なので、ゲームウィンドウとは別にウィンドウ(cmdみたいなもの)を立ち上げてそこに変数の数値を表示したいのですが可能なんでしょうか?
もしできるなら、作り方のサイトか2ウィンドウの作り方を教えてもらえたらうれしいです。
説明が下手ですみません;;
複数ウィンドウ表示の仕方
Re: 複数ウィンドウ表示の仕方
プログラムの内容はそのままで、anten さんが書きました:なので、ゲームウィンドウとは別にウィンドウ(cmdみたいなもの)を立ち上げてそこに変数の数値を表示したいのですが可能なんでしょうか?
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) を
int main() に変えると、起動時に cmd.exe が開き、
printf で変数の値などを表示できませんか?
Re: 複数ウィンドウ表示の仕方
CreateWindowをクラス名を変えて呼べばウインドウ自体は複数作成できると思います。ちょっと詳細が思い出せないのですが、DirectXと共存させる場合はスレッドを分けた方がよいらしいです。自分はメインのゲームのスレッドのデバッグ情報の文字列をバッファのワークに貯めておいて、サブのデバッグ表示用のスレッドで一括で表示しています。バッファのワークに同時にアクセスしないように単純なフラグで切り替えています。
Re: 複数ウィンドウ表示の仕方
過去に何度も説明をしています(^^;
以下の通りです。( Windows10、VS2017Community 使用 )
http://www2.koyoen.birdview.co.jp/~abcxyz/の.png
以下の通りです。( Windows10、VS2017Community 使用 )
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
AllocConsole(); // コンソール
FILE* out = 0; freopen_s( &out, "CON", "w", stdout ); // stdout
FILE* in = 0; freopen_s( &in, "CON", "r", stdin ); // stdin
ChangeWindowMode( TRUE ); // ウィンドウモード
printf("DXDXライブラリ初期化:開始\n");
DxLib_Init(); // DXライブラリ初期化
printf("DXDXライブラリ初期化:終了\n");
DrawString(30, 20, "DxLib: Hello World!", GetColor(255, 255, 255)); // 文字を書く
printf("Hello World!\n");
printf("%d\n",12345);
WaitKey(); // キー入力があるまで待機
DxLib_End(); // DXライブラリ終了処理
// コンソール解放
fclose( out ); fclose( in ); FreeConsole();
return 0;
}
Re: 複数ウィンドウ表示の仕方
[注] Win32コンソールアプリケーションとして設定すれば コンソールより起動できます。
[Windows10、VS2017Community, Developer Command Prompt for VS2017 使用]
g.bat g.mak
g1.cpp
http://www2.koyoen.birdview.co.jp/~abcxyz/ふ.png
[Windows10、VS2017Community, Developer Command Prompt for VS2017 使用]
g.bat g.mak
TARGETNAME=g1
C_FLAGS=/c /TP /EHsc /D "_MBCS" /MT /Id:\dxlib /D "WIN32" /D "NDEBUG" /W3
LINK_FLAGS=/SUBSYSTEM:CONSOLE /LIBPATH:d:\dxlib "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib"
ALL:
cl $(C_FLAGS) $(TARGETNAME).cpp
link /out:$(TARGETNAME).exe $(LINK_FLAGS) $(TARGETNAME).obj
$(TARGETNAME).exe
#include "DxLib.h"
//int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
int main()
{
ChangeWindowMode( TRUE ); // ウィンドウモード
printf("DXDXライブラリ初期化:開始\n");
DxLib_Init(); // DXライブラリ初期化
printf("DXDXライブラリ初期化:終了\n");
DrawString(30, 20, "DxLib: Hello World!", GetColor(255, 255, 255)); // 文字を書く
printf("Hello World!\n");
printf("%d\n",12345);
WaitKey(); // キー入力があるまで待機
DxLib_End(); // DXライブラリ終了処理
return 0;
}
Re: 複数ウィンドウ表示の仕方
数値を並べて表示したい場合、こんなふうにメモ帳を利用することもできます。
矢印で囲った部分。DXライブラリと関係なく使えます。
矢印で囲った部分。DXライブラリと関係なく使えます。
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
SetAlwaysRunFlag(TRUE);
ChangeWindowMode(TRUE);
if (DxLib_Init() != 0) return 0;
SetDrawScreen(DX_SCREEN_BACK);
while (ProcessMessage() == 0 && ScreenFlip() == 0 && ClearDrawScreen() == 0) {
// ↓↓↓↓↓↓↓↓
HWND hwnd = FindWindow("Notepad", NULL); // 『メモ帳』のウィンドウを探す
if (hwnd) {
// ウィンドウが見付かったらクライアント領域に数値を文字列として描画
static int i = 0;
char s[256];
sprintf(s, "[%5d]", i++);
HDC hdc = GetDC(hwnd);
TextOut(hdc, 0, 0, s, strlen(s));
ReleaseDC(hwnd, hdc);
}
// ↑↑↑↑↑↑↑↑
}
DxLib_End();
return 0;
}