SDL2 程序只写入部分字符串
SDL2 program write only part of string
我有一个带有函数TextOut
的代码,每次都会在窗口上写入一个字符,并有一些延迟。一切都正常,但我的程序只将部分字符串写入窗口。但是,有时程序会写入整个文本。
此函数从字符创建 wchar
char* cts(char c)
{
char *ptr = (char*)malloc(2 * sizeof(char));
ptr[0] = c;
ptr[1] = ' ';
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] == ' ') 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(您不需要(,这是值得怀疑的。
对我来说,全文总是出现,所以我无法测试这些改进是否会解决你的问题,但它们绝对是你的代码的问题。
您应该释放cts
内部malloc
分配的内存,例如您可以这样做:
char* temp = cts(OUT_STRING[x]);
TTF_SizeText(f, temp, &rect.w, &rect.h);
free(temp);
检查是否发生了退出事件时,不要使用分配而不是比较。正确的方法是:
if (e.type == SDL_QUIT) quit = true;
检查是否已到达char
数组的末尾时,请勿使用NULL
。改为这样做:
if (OUT_STRING[x] == ' ') return;
相关文章:
- 在将字符串放入字符串向量时遇到问题?
- 如何在 EOF 之前从文件中读取并将其放入字符串中?
- 使用重定向命令从 stdin 读入的字符串"<"输入文件未正确附加
- 如何将csv中的数据放入c++中的字符串向量中,而绝对没有任何作用
- (C++) 取字符串的每个字符并将其放入数组中并获取所述数组的大小?
- 如何将字符串推入shared_ptr向量?
- 为什么具有两个元素的发起器语法将一个元素而不是两个元素放入字符串向量中?
- 使用 ReadProcessMemory() 将未知大小的字符数组或字符串读入 wstring 中
- 如何从字符串创建一个web::uri以放入client.connect()
- C++子字符串搜索 - 跳入C++
- 如何将字符串片段读入类数组C++
- 当我将字符串放入节点>名称时,为什么会出现分段错误(核心转储)?
- 将字符串从BASH脚本(C 程序)推入CIN
- C++ 将字符串放入数组中
- 字符串构造函数将两个字符* 放入另一个 std::string 在 C++14 中有效,但不适用于 C++17
- 如何通过分隔符拆分字符串并将每个字符串放入不同的向量中
- 为什么这个C++程序舍入双值而不打印整个字符串
- 有没有一种方法可以使用预处理器将文本资源拉入原始字符串
- 正在尝试读取要放入二进制树的字符串
- 从文件中读取一行并将其放入字符串中(使用 fstream)