c++ - SDL2程序只写字符串的一部分
问题描述
我有一个带有函数的代码,TextOut
每次都会在窗口上写入一个字符,但会有一些延迟。一切正常,但我的程序仅将部分字符串写入窗口。但是有时程序会写入整个文本。
此函数从 char 创建 wchar
char* cts(char c)
{
char *ptr = (char*)malloc(2 * sizeof(char));
ptr[0] = c;
ptr[1] = '\0';
return ptr;
}
void TextOut(SDL_Renderer *ren, TTF_Font *f)
{
SDL_Surface *sur;
SDL_Texture *tex;
static SDL_Rect rect;
static int32_t x;
//Checking if string is end
if (OUT_STRING[x] == '\0') return;
//Get a wide char from string
char *temp = cts(OUT_STRING[x]);
//Get the size of font
TTF_SizeText(f, temp, &rect.w, &rect.h);
sur = TTF_RenderText_Blended(f, temp, color)
free(temp);
tex = SDL_CreateTextureFromSurface(ren, sur);
SDL_RenderCopy(ren, tex, NULL, &rect);
SDL_RenderPresent(ren);
rect.x += rect.w;
x++;
SDL_FreeSurface(sur);
SDL_Delay(50);
}
int main(int argc, char* argv[])
{
/*
Initialization of Window, Renderer, Font and other things
*/
OUT_STRING = "We are waiting";
while (!quit)
{
while (SDL_PollEvent(&e) != 0)
{
TextOut(renderer, font);
if (e.type == SDL_QUIT) quit = true;
}
}
return 0;
}
解决方案
你描述的问题是由于你的事件循环 - 你在那里调用你的渲染函数。当您的窗口显示时,会生成几个事件(SDL_WINDOWEVENT_EXPOSED 等),因此您的渲染函数调用了几次,但对于您的“整个”文本来说还不够。当更多事件到达时(鼠标移动,按键,窗口操作,...) - 你可以看到更多。如果这是不希望的行为 - 您应该使用事件循环来处理事件,例如:
while (!quit)
{
while (SDL_PollEvent(&e) != 0)
{
if (e.type == SDL_QUIT) quit = true;
}
TextOut(renderer, font);
}
在显示所有字符后如何继续绘制,或者为什么需要 malloc(你不需要),这是值得怀疑的。
推荐阅读
- python - 如何将多个numpy数组组合成一个字典列表
- javascript - 如何在 fetch then/response 函数中访问请求对象
- apache-spark - 数据集中reduce方法有哪些有用的用例
- c# - 尝试通过 C# 选择数据库时出现 IndexOutOfRangeException
- opencv - Opencv如何在视频上叠加文本
- laravel - 如何在 laravel 中获取周报和月报?
- python - 双递归 - RuntimeError: 超出最大递归深度错误
- html - 网格列未对齐且文本转换不适用于导航栏中的链接
- azure - Azure 数据工厂动态内容参数
- reactjs - 如何重置作为自定义组件制作的 TextInput?