我想提出一個遊戲在DirectX,C++用的不同部分在課堂之中。目前我正在做一個字體類,但是當我去繪製一個字符串時,它不顯示,我不知道爲什麼。很感謝任何形式的幫助。DirectX字體沒有繪圖?
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;
};
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();
}
您好,感謝您的答案,但我使用的是多字節字符集因此這不起作用。用我目前的版本,我檢查了HRESULT,並沒有問題。 – Antony 2013-04-10 10:58:02
@OnlyAntony因此,使用** **字符串和mbscpy_s代替wcscpy_s。 – user1610015 2013-04-10 12:03:13
對不起,這不起作用。我已經包括,然後使用:_mbscpy_s(desc.FaceName,LF_FACESIZE,name.c_str());我曾嘗試desc.Filename和名稱難熬&之前,也移除了名的c._str()。它顯示的錯誤是:錯誤C2664: 'errno_t _mbscpy_s(無符號字符*,爲size_t,const的無符號字符*)':無法從 'CHAR [32]' 到 '無符號字符*' –
Antony
2013-04-10 14:54:23