2013-01-24 43 views
0

我試圖在屏幕上顯示得分。下面的代碼工作正常:用int轉換LPCTSTR的Directx9字體更新

g_Font = NULL; 
D3DXFONT_DESC f = {fontSize, 
        0, 
        400, 
        0, 
        false, 
        DEFAULT_CHARSET, 
        OUT_TT_PRECIS, 
        CLIP_DEFAULT_PRECIS, 
        DEFAULT_PITCH, 
        fontName}; 
fontDesc = f; 
fontPosition.top = top; 
fontPosition.left = left; 
fontPosition.right = right; 
fontPosition.bottom = bottom; 
text = t; 
D3DXCreateFontIndirect(device,&fontDesc,&g_Font); 

下面的部分是用於渲染每一幀:

g_Font->DrawText(NULL, 
     text, 
     -1, 
     &fontPosition, 
     DT_CENTER, 
     0xffffffff); //draw text 

我想要做的是,在運行時更新文本。我只是更新文本變量,因爲繪製代碼爲每個幀運行,但它不起作用。一個簡單的文本工程,但以下建設不起作用:

const size_t buflen = 100; 
TCHAR buf[buflen]; 
_sntprintf(buf, buflen - 1, TEXT("Point: %d"), point); 
text = (LPCTSTR)buf; 

我幾乎嘗試了我可以在網上找到的每個解決方案,但他們不工作。我可以看到整數轉換成功,但在下面的渲染中有荒謬的字符。任何解決方案

+0

'pointLabel'從哪裏來?你不能簡單地用'DrawText'來表示你的新價值嗎? – emartel

+0

是的,我可以,但它是另一個爲抽象而實施的類;所以這不是問題的關鍵。 – mtyurt

+0

沒有我們告訴我們'pointLabel'上的'setText'是如何實現的,我們可以告訴你的是...'pointLabel'被渲染了嗎? – emartel

回答

0

您發佈的代碼不完整,但我仍會盡力爲您提供一個可幫助您解決問題的答案。

第一個問題是我認爲你在混合概念,而你正在處理DrawText,就好像它是一個WinForms的UI元素或其他東西。每次你想更新文本時,需要調用DrawText。它不會存儲指向您傳遞的緩衝區的指針,並在更改此緩衝區時自動更新文本,請參閱文檔here。如果您想添加「標籤封裝器」,則需要在調用BeginSceneEndScene之間調用DrawText,最有可能的方法是使用Render方法。

至於荒唐的字符,如果你的字符串轉換得當,你確定你Clear你的RenderTarget再次繪製之前呢?