0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DXLibAdvent Calendar 2020

Day 21

DXライブラリでマイクラのデバッグ画面みたいなやつを作る

Posted at

DXライブラリのアドベントカレンダーを一人で埋めていくシリーズです。

今回作りたいのはこんなやつ↓
image.png画像引用元

下のグラフとかはまたやる気があったらやってみます。(多分やらない)
今回は上の数字とか文字がいっぱいあるやつをやります。

実装方針

といっても簡単な話で、背景に半透明の矩形を描画したうえに文字列を描画させます。
また、すべての処理箇所で使用したいのでグローバル空間においておきます。

補足

フォントはDxLib_Init()のあとでしか読み込めませんので、グローバル空間に置く場合、コンストラクタ内ではフォントは読み込めません。

実装

DebugConsole.h
#include<vector>
#include<DxLib.h>

class Debug {
	std::vector<std::string> List; //描画する項目
	int FontHandle; //描画するフォント
public:
	void Init() { //フォントを使用しない場合はいらない
		FontHandle = CreateFontToHandle("MSゴシック", 16, 2);
	}

	void Add(std::string text) { //描画する項目を追加
		List.push_back(text);
	}

	void Add() { //空行を追加
		List.push_back("");
	}

	void Update() {
		int i = 0;
		for (auto& t : List) {
			if (t == "") { //空行処理
				i++;
				continue;
			}
			int x, y, l;
			SetDrawBlendMode(DX_BLENDMODE_ALPHA, 127); //背景の矩形を半透明にする
			GetDrawStringSizeToHandle(&x, &y, &l, t.c_str(), t.length(), FontHandle); //各行の大きさを取得
			DrawBox(0, i * y, x, i * y + y, 0x000000, TRUE); //背景の矩形を描画
			SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0); //半透明から通常に戻す
			DrawStringToHandle(0, i * y, t.c_str(), 0xffffff, FontHandle); //文字列をフォントを使って描画

			i++;
		}
		List.clear(); //すべて描画し終えたら、リストを消去する
	}
};

Debug debug;

使用例

main.cpp
#include <DxLib.h>
#include "DebugConsole.h"

void foo() {
	debug.Add();
	debug.Add("foo");

	if (CheckHitKey(KEY_INPUT_A) != 0) {
		debug.Add("A ia pushed");
	}
	debug.Add();
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR IpCmdLine, int nCmdShow) {
	ChangeWindowMode(TRUE);

	if (DxLib_Init() == -1) {
		return -1;
	}

	SetDrawScreen(DX_SCREEN_BACK);

	SetBackgroundColor(0xbc, 0xe2, 0xe8);//背景を水色に
	
	debug.Init();

	while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {
		debug.Add("1");
		debug.Add("2");
		foo();
		debug.Add("3");


		debug.Update();
	}
	DxLib_End();

	return 0;
}

実行結果

Aキー押してないとき

image.png

Aキー押してるとき

image.png

このように、実行順に上から描画されます。

最後に

何かあったら不備や改善点があればコメントで教えてください

0
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?