#c #winapi
Вопрос:
Я создаю игру на c с использованием ASCII, и мне нужно растянуть / сжать текст, потому что все растягивается по оси Y
Пример:
Я пробовал SetConsoleTextAttribute, но если я установлю x и y, чтобы попытаться скорректировать текст, он только масштабирует его, как X и Y вместе.
Текущий код:
HANDLE m_hConsole;
void ASCIIRenderer::InitialisePixelSize(int fontx, int fonty)
{
PCONSOLE_FONT_INFOEX font_size = new CONSOLE_FONT_INFOEX();
font_size->cbSize = sizeof(CONSOLE_FONT_INFOEX);
GetCurrentConsoleFontEx(m_hConsole, false, font_size);
font_size->dwFontSize.X = fontx; //Width of element in buffer
font_size->dwFontSize.Y = fonty; //Hieght of element in buffer
SetCurrentConsoleFontEx(m_hConsole, false, font_size); //Set the new font size
}
Есть ли способ изменить X или Y, чтобы эффективно растягивать / сжимать текст?
Комментарии:
1. Я предполагаю, что вам нужны квадратные «пиксели». Затем вы могли бы воспользоваться тем фактом, что символы имеют соотношение сторон примерно 1: 2, т. Е. 2 символа рядом друг с другом образуют квадрат
2. недостатком этого является каждый раз, когда я хочу создать новый спрайт (сетку текстовых символов) Мне пришлось бы удвоить все текстовые символы для спрайта, что занимает много времени и может вызвать проблемы, потому что все это вводится вручную. в конечном итоге было бы проще и проще изменить размер текста.
3. Найдите шрифт с размером, семейством или таким, который имеет квадратные глифы. Если в системных шрифтах этого нет, вы можете загрузить большинство файлов шрифтов
AddFontResource()
. Кстати, не используйтеnew
для выделенияCONSOLE_FONT_INFOEX
, просто объявите его локально и установитеcbSize
. Чтобы передать указатель в функции, используйтеamp;font_size
4. Насколько я понимаю, вы могли бы попробовать использовать DirectWrite для растягивания / сжатия текста. Например, вы можете попробовать использовать метод IDWriteFactory::CreateTextFormat