0

我正在尝试在屏幕上显示分数。以下代码工作正常:

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;

我尝试了几乎所有可以在网上找到的解决方案,但它们不起作用。可以看到整数转换成功,但是下面的渲染中出现了荒谬的字符。有什么解决办法吗?

4

1 回答 1

0

您发布的代码不完整,但我仍会尝试为您提供可以帮助您解决问题的答案。

第一个问题是我认为您正在混合概念,并且您正在处理DrawText它,就像它是 aWinForms或其他东西的 UI 元素一样。每次要更新文本时,DrawText都需要调用。它不存储指向您传递的缓冲区的指针,并在更改此缓冲区时自动更新文本,请参阅此处的文档。如果你想添加一个“标签包装器”,你需要在调用和调用之间调用它,DrawText很可能是在一个Render方法中。BeginSceneEndScene

至于荒谬的字符,如果您的字符串转换正确,您确定ClearRenderTarget在重新绘制之前就可以了吗?

于 2013-01-24T18:35:43.453 回答