Я пытаюсь показать счет на экране. Следующий код работает нормально:
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;
Я испробовал почти все решения, которые мог найти в Интернете, но они не работают. Я вижу, что целое число успешно преобразовано, но в следующем рендеринге есть абсурдные символы. Какие-либо решения?
Размещенный вами код неполон, но я все же постараюсь дать вам ответ, который должен помочь вам решить проблему.
Во-первых, я думаю, что вы смешиваете понятия и работаете DrawText
как если бы это был элемент пользовательского интерфейса WinForms
или что-то. Каждый раз, когда вы хотите обновить текст, DrawText
должен быть вызван. Он не хранит указатель на буфер, который вы передаете, и автоматически обновляет текст при изменении этого буфера, см. Документацию Вот. Если вы хотите добавить «упаковщик меток», вам нужно будет вызвать его DrawText
скорее всего в Render
метод, между вызовами BeginScene
а также EndScene
,
Что касается абсурдных символов, если ваша строка преобразована правильно, вы уверены, что вы Clear
ваш RenderTarget
прежде чем снова рисовать на нем?
Других решений пока нет …