DirectX11には文字を表示する機能が無いので、予め文字の画像を用意しておき、それを並べて表示することになる。
その都合上、表示できる文字には限りがある。(画像にあるものしか表示できない)
画像は前もってAssetsフォルダに入っている(変更可)
使用できる文字はアスキーコード表の下図の範囲となる。
例えば、Playerクラスで「Hello」文字を表示する場合で説明する。
<Player.h> (太字部分を追加)
#pragma once
#include "Engine/Text.h"
class Player : public IGameObject
{
private:
Text* pText;
public:
<Player.cpp> (太字部分を追加)
Player::Player(IGameObject * parent)
:IGameObject(parent, "Player"), pText(nullptr)
{
}
void Player::Initialize()
{
pText = new Text;
pText->Initialize();
}
void Player::Draw()
{
pText->Draw(30, 30, "Hello");
}
void Player::Release()
{
pText->Release();
}
Draw関数の引数は、表示したい位置のXY座標(左上、ピクセル単位)と、表示したい文字列。
数値を表示したい場合は、最後の引数にint型を渡してやることもできる。(整数のみ対応)
(例)
int hp = 100;
pText->Draw(30, 30, hp);
なお解放処理に関しては、シーンが切り替われば自動的に解放されるので、書いても書かなくてもいい。開放処理を書くとエラーになることが分かったので書かないこと(自動で解放されるので、それに任せる)
自分で用意した画像を使うこともできる。
<画像を作る時のルール>
・幅と高さは2の乗数
・すべての文字が等間隔に並んでいる
・文字はアスキーコード表の順番に並んでいる
あとは、Inisializeする際に引数に必要な情報を渡す
(例)
Initialize("original.png", 64, 64, 20);
引数は
・ファイル名
・1文字の幅(ピクセル)
・1文字の高さ(ピクセル)
・画像の中に横に何文字並んでいるか
あとは、普通に使用できる。