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

再描画の間に画面をクリアしていないため、既にペイントされたテキスト (または何か) をペイントするだけで、あなたが言うように「白のぼかし」になります。

たとえば、フレームごとに画面で fillrect を試します。

追記:font_surfaceを解放していないようです->メモリリーク。

于 2012-10-27T04:44:45.540 に答える
0

毎回すべてを再描画するか、背景が単色の場合は、長方形をペイントしてその上にテキストを描画します.

2 番目の方が効率的です。ただし、複雑なシナリオがある場合は、レイヤーを使用することをお勧めします。最初に一番下のレイヤーをレンダリングし、次に 2 番目のレイヤーをレンダリングします。つまり、レイヤーによってbackground()、背景を描画しforeground()、明らかに前景を描画する を作成できます。したがって、次のようなものになります。

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

そのため、より複雑なシナリオを簡単に処理できます。

于 2012-10-27T03:49:26.577 に答える