gpt4 book ai didi

c++ - DirectX 字体不绘制?

转载 作者:行者123 更新时间:2023-11-27 23:16:33 24 4
gpt4 key购买 nike

我正在使用 DirectX、C++ 制作一款游戏,游戏的不同部分都在类中。目前我正在做一个字体类,但是当我去绘制一个字符串时,它没有显示,我也不知道为什么。非常感谢任何帮助。

字体.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();
}

最佳答案

字体描述符中显然有一些错误的字段。一是重量,正如 Roger Rowland 所提到的。另一个是最后一个,FaceName(字体名称)。您正在尝试将指针转换为 char,这会产生不好的结果。如果您的项目配置为使用 Unicode(Visual Studio 中大多数项目类型的默认设置),FaceName 成员将是一个 WCHAR 数组,因此您应该使用 wstring。另一件事是您应该检查 D3DXCreateFontIndirect 的返回值(以及任何其他返回 HRESULT 的 D3D 函数和方法):

HRESULT d2Font::Create(const wstring& name, int size, LPDIRECT3DDEVICE9 device)
{
D3DXFONT_DESC desc = {
size,
0,
400,
0,
false,
DEFAULT_CHARSET,
OUT_TT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_PITCH
};

wcscpy_s(desc.FaceName, LF_FACESIZE, name.c_str());

HRESULT hr = D3DXCreateFontIndirect(device, &desc, &font);
if (FAILED(hr))
return hr;

return S_OK;
}

关于c++ - DirectX 字体不绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15903353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com