gpt4 book ai didi

c++ - SDL - 像控制台一样打印文本?

转载 作者:行者123 更新时间:2023-11-28 07:33:17 24 4
gpt4 key购买 nike

我有一些使用 SDL_ttf 的代码(如下),我想:

  1. 能够像控制台一样(将每个字符打印在其单独的单元格中)以对齐方式(也与缓冲区或数组对齐)呈现文本(来自 TTF)。
  2. 能够使用闪烁的光标(可能渲染和取消渲染下划线,也许吧?)
  3. 能够让用户从键盘输入文本并在键入时立即在屏幕上呈现每个字符(使用 SDLK_charhere)。

回到#1:我正在考虑获取屏幕上打印的前一个字符的宽度(来自 TTF)并使用它的宽度(以像素为单位)在前一个字符之后打印下一个字符,加上2 个像素。 <-- 如果常规 WIN32 控制台中字符之间的间距以像素为单位大小不同,请告诉我。

这里是需要修改的代码:

#include "include/SDL/SDL.h"
#include "include/SDL/SDL_ttf.h"

int currentX = 0;
int currentY = 0;
int newW;
int newH;
SDL_Surface* screen;
SDL_Surface* fontSurface;
SDL_Color fColor;
SDL_Rect fontRect;

SDL_Event event;

TTF_Font* font;

//Initialize the font, set to white
void fontInit(){
TTF_Init();
font = TTF_OpenFont("dos.ttf", 12);
fColor.r = 0; // 255
fColor.g = 204; // 255
fColor.b = 0; //255
}

//Print the designated string at the specified coordinates
void PrintStr(char *c, int x, int y){
fontSurface = TTF_RenderText_Solid(font, c, fColor);
fontRect.x = x;
fontRect.y = y;
SDL_BlitSurface(fontSurface, NULL, screen, &fontRect);
SDL_Flip(screen);
}

int main(int argc, char** argv)
{
// Initialize the SDL library with the Video subsystem
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE);

//Create the screen
screen = SDL_SetVideoMode(320, 480, 0, SDL_SWSURFACE);

//Initialize fonts
fontInit();

PrintStr("", 0, 0);

do {
// Process the events
while (SDL_PollEvent(&event)) {
switch (event.type) {

case SDL_KEYDOWN:
switch (event.key.keysym.sym) {
// Escape forces us to quit the app
case SDLK_ESCAPE:
event.type = SDL_QUIT;
break;

default:
break;
}
break;

default:
break;
}
}
SDL_Delay(10);
} while (event.type != SDL_QUIT);

// Cleanup
SDL_Quit();

return 0;
}

最佳答案

这不是一件微不足道的事情,但听起来像是一个很好的学习项目!您可能需要几千行代码,而不是上面的几十行代码。或许可以从考虑这些问题及其答案开始。

  • 您想要固定宽度的字体还是可变宽度的字体?
  • 如何以智能方式缓冲呈现的文本? (例如字形或线条。)
  • 如何以智能方式缓冲文本本身?
  • 如何将按键操作转换为文本?
  • 是什么在转化和插入这一切?

所有这些都需要与最重要的问题一起考虑:

  • 我想这样做吗?

如果您这样做,它会教会您很多编程知识,但它可能不会为您提供您正在寻找的最好的全屏控制台。

关于c++ - SDL - 像控制台一样打印文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17227471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com