在这里看到这篇文章关于使用SDL_ttf在游戏中渲染文本.但是,这种方法需要每个帧调用SDL_CreateTextureFromSurface()以及SDL_FreeSurface()和SDL_DestroyTexture().
创建纹理(并且可能随后必须将它们发送到GPU)每一帧都会对我的性能产生重大影响吗?
使用SDL_ttf只是用我的整个渲染字符集创建一个纹理然后自己从那里开始逐个字符?
编辑:我希望只用美国英语(基本ASCII)渲染简单的等宽字体.
正如手册所说,函数SDL_PollEvent"如果有待处理事件则返回1,如果没有可用则返回0".,这就是为什么我们使用的测试SDL_PollEvent(&e)!=0(如果e是SDL_Event).
但是,使用这个测试!SDL_PollEvent(&e)怎么样?它应该工作,但显然它会导致一些问题.
这是一个代码示例:
#include <SDL2/SDL.h>
#include <stdio.h>
int main(int argc, char* args[]){
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* window = SDL_CreateWindow("Hello",SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 100, 100, SDL_WINDOW_SHOWN);
SDL_Event e;
int quit=0;
while(!quit){
//Here the test
while (!SDL_PollEvent(&e)){
if (e.type==SDL_QUIT)
quit=1;
else if ( e.type == SDL_KEYDOWN )
printf( "Hello\n" );
}
}
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这个代码应该做的是打开一个新窗口,并在每次按下一个键时在控制台中打印"Hello".这段代码可以很好地测试,SDL_PollEvent(&e)!=0但是SDL_KEYDOWN当我使用测试时它不会读取事件!SDL_PollEvent(&e)(但它会在while中输入并处理SDL_QUIT事件而没有任何问题).
为什么会这样?
我想尝试一个常见问题*
这是我如何将int转换为字符串并将其与const char*连接
char tempTextResult[100];
const char * tempScore = std::to_string(6).c_str();
const char * tempText = "Score: ";
strcpy(tempTextResult, tempText);
strcat(tempTextResult, tempScore);
std::cout << tempTextResult;
Run Code Online (Sandbox Code Playgroud)
打印时的结果是:分数:
有谁知道为什么6不打印?
提前致谢.