这是我的代码:
void apply_start_screen()
{
apply_surface( 0, 0, startingScreenBackground, screen );
apply_surface( ( SCREEN_WIDTH - startButton->w ) /2, 200, startButton, screen);
apply_surface( ( SCREEN_WIDTH - infoButton ->w ) /2, 450, infoButton, screen );
message = TTF_RenderText_Solid( font, "In The Jungle!", green );
apply_surface( ( SCREEN_WIDTH - message->w ) / 2, 25, message, screen );
SDL_Flip( screen );
}
主要代码......
Mouse start( ( SCREEN_WIDTH - startButton->w ) /2, 200, 200, 200);
这是一个只使用sdl rect创建一个按钮的类,并检查它是否被按下
和问题在这里:
while( quit == false )
{
apply_start_screen();
if( start.handle_event() == true )
{
currentState = 1;
}
}
当前状态只是进入下一个屏幕而不用担心。 问题是apply_start_screen()会在每次使用时增加系统内存。我不懂。如果你渲染相同的图像/文本一次使用更多的内存?为什么? sdl表面是动态分配的,但我仍然渲染相同的表面,这意味着我不分配更多的内存?有什么建议 ?谢谢你的时间。
答案 0 :(得分:0)
解决方案:由于TTF_RenderText_Solid返回一个曲面而SDL_surface是一个动态分配像素的结构,问题是在apply_start_screen函数动态分配内存的每一帧上都是如此。有两种方法可以解决这个问题: 首先创建一个全局SDL_surface *消息并执行以下操作:
void apply_start_screen()
{
apply_surface( 0, 0, startingScreenBackground, screen );
apply_surface( ( SCREEN_WIDTH - startButton->w ) /2, 200, startButton, screen);
apply_surface( ( SCREEN_WIDTH - infoButton ->w ) /2, 450, infoButton, screen );
message = TTF_RenderText_Solid( font, "In The Jungle!", green );
apply_surface( ( SCREEN_WIDTH - message->w ) / 2, 25, message, screen );
SDL_FreeSurface( message );
message = NULL;
}
或只是删除TTF_RendeText_Solid,因此不再创建/返回表面:
void apply_start_screen()
{
apply_surface( 0, 0, startingScreenBackground, screen );
apply_surface( ( SCREEN_WIDTH - startButton->w ) /2, 200, startButton, screen);
apply_surface( ( SCREEN_WIDTH - infoButton ->w ) /2, 450, infoButton, screen );
apply_surface( ( SCREEN_WIDTH - message->w ) / 2, 25, message, screen );
}
main...
message = TTF_RenderText_Solid( font, "In The Jungle!", green );
rest of program...
希望我帮助过:)