私はDirectX、C++でゲームを作成しており、そのさまざまな部分がクラスになっています。現在、フォントクラスを行っていますが、文字列を描画しようとすると表示されず、理由がわかりません。どんな助けでも大歓迎です。
font.h
class d2Font
{
public:
d2Font(void);
~d2Font(void);
void Create(string name, int size, LPDIRECT3DDEVICE9 device);
void Draw(string text, int x, int y, int width, int height, DWORD format = DT_LEFT, D3DCOLOR colour = D3DCOLOR_XRGB(255, 255, 255));
private:
LPD3DXFONT font;
};
フォント.cpp
d2Font::d2Font(void)
{
font = NULL;
}
d2Font::~d2Font(void)
{
if(font)
font->Release();
}
void d2Font::Create(string name, int size, LPDIRECT3DDEVICE9 device)
{
LPD3DXFONT tempFont = NULL;
D3DXFONT_DESC desc = {
size,
0,
0,
0,
false,
DEFAULT_CHARSET,
OUT_TT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_PITCH,
(char)name.c_str()
};
D3DXCreateFontIndirect(device, &desc, &tempFont);
font = tempFont;
}
void d2Font::Draw(string text, int x, int y, int width, int height, DWORD format, D3DCOLOR colour)
{
RECT rect = {x, y, width, height};
//SetRect(&rect, x, y, width, height);
font->DrawText(NULL, text.c_str(), -1, &rect, format, colour);
}
編集: main.cpp のコードは次のとおりです。
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
gameHinstance = hInstance;
gameMain = new d2Main();
testFont = new d2Font();
if(!gameMain->NewWindow(hInstance, hWnd, "Test Game", 800, 400, nCmdShow, false))
{
MessageBox(NULL, "Error! Unable to create window!", "D2EX", MB_OK | MB_ICONASTERISK);
return 0;
}
gameMain->GameRunning = true;
testFont->Create("Arial", 12, gameMain->dx->d3ddev);
gameMain->GameLoop();
return 0;
}
void d2Main::GameUpdate()
{
gameMain->dx->d3ddev->BeginScene();
testFont->Draw("HelloWorld!", 10, 10, 200, 30, DT_LEFT, D3DCOLOR_XRGB(0, 255, 0));
gameMain->dx->d3ddev->EndScene();
}