1

我基本上是 C++ 的初学者,但正在研究如何更新处于 while 循环中的字符串?

目前,循环的每次迭代都将文本写在前一个之上,但它基本上仍然是白色的模糊。

这是我正在测试的循环:

while(!quit){
    while( SDL_PollEvent( &event ) ){
        switch(event.type){
            case SDL_QUIT: quit = true; break;
            case SDL_MOUSEMOTION: handle_mouse_position();
        }
    }

    SDL_Rect offset;
    offset.x = 400;
    offset.y = 290;

    std::stringstream s;
    s << "Mouse xpos: " << mouseX << " Mouse ypos: " << mouseY;

    font_surface = TTF_RenderText_Solid(font,s.str().c_str(),font_color);
    SDL_BlitSurface(font_surface, NULL, screen, &offset);   

    //Update the screen
    if( SDL_Flip( screen ) == -1 ) {
        return 1;    
    }
}

有没有办法清除以前的文本输出并在每个循环中更新它,以便清楚地显示鼠标位置?

4

2 回答 2

1

您没有在重绘之间清除屏幕,所以它只是在已经绘制的文本(或任何东西)上绘制,并且正如你所说的那样,它变成了“白色模糊”。

例如,每帧都在屏幕上尝试填充矩形。

额外说明:您似乎没有释放 font_surface --> 内存泄漏。

于 2012-10-27T04:44:45.540 回答
0

您可以每次都重新绘制所有内容,或者如果您的背景是纯色,则绘制一个矩形并在其上方绘制文本。

第二种效率更高。但是如果你有一个复杂的场景,最好使用图层。首先你渲染底层,然后是第二层,依此类推……我的意思是,你可以有一个background()绘制背景的图层foreground(),显然,它绘制前景。因此,您将拥有如下内容:

while (main_loop) {
    background();
    foreground();
}

因此,您可以轻松处理更复杂的场景。

于 2012-10-27T03:49:26.577 回答