1

私は最初のゲームをすることにしました。それは単純になるでしょうが、私はc ++を使いたいので、学習のためにSDLを選びました。だから私の質問は、コードを書くときに「バッファ」がどのように扱われるかについてです。関連するコードを下部に投稿します。

さて、基本的に私が理解しているのは、SDLが実際に画面に描画されているバッファーを処理するということです。私がバッファに書き込んでいるとき、それは常に私が書き込んでいるバックバッファ、または現在画面に描画されていないバッファです。したがって、SDL_Flip(screen)を呼び出すと、画面の表面がバックバッファーに「ブリット」され、バッファーが描画されているポインターが、以前はバックバッファーであったバッファー、作業していたバッファーに移動します。現在表示されていた古いバッファがバックバッファになります。この時点で、SDL_FillRect(arguments)を呼び出すと、バックバッファで実行されますか?

質問を明確にするのに役立つかもしれないので、学習ゲームの「ハートビート」全体を投稿します。

//While the user hasn't quit
while( quit == false )
{
    //If there's an event to handle
    if( SDL_PollEvent( &event ) )
    {
        //If a key was pressed
        if( event.type == SDL_KEYDOWN )
        {
            //Set the proper message surface
            switch( event.key.keysym.sym )
            {
                case SDLK_UP: message = upMessage; break;
                case SDLK_DOWN: message = downMessage; break;
                case SDLK_LEFT: message = leftMessage; break;
                case SDLK_RIGHT: message = rightMessage; break;
            }
        }

        else if( event.type == SDL_QUIT ) //if the user clicks the little X in the upper right corner.
        {
            quit = true;
        }
    }

    //If a message needs to be displayed
 if( message != NULL )
 {
      // Clear the back buffer.
      SDL_FillRect( SDL_GetVideoSurface(), NULL, 0 );

      //Draw the backgroudn to the back buffer.
      apply_surface( 0, 0, background, screen );

      // Draw the "message" to the back buffer.
      apply_surface( ( SCREEN_WIDTH - message->w ) / 2, ( SCREEN_HEIGHT - message->h ) / 2, message, screen );

      //Null the surface pointer
      message = NULL;
    }

    //Swap the current and back buffer.
    if( SDL_Flip( screen ) == -1 )
    {
        return 1;
    }
}
4

1 に答える 1

0

システム(X11、Linuxフレームバッファ、Windowsなど)に大きく依存し、バックエンドSDLがシステムとの対話に使用します。また、SDL_SetVideoModeに渡すフラグ。基本的に、プログラムのメモリ領域に配置されるソフトウェアサーフェスと、グラフィカルカードのメモリに配置されるハードウェアサーフェスがあります。あなたが説明しているのは、SDL_HWSURFACE|を渡すと有効になるダブルバッファのようです。SDL_DOUBLEBUFからSDLへ。これはすべてのプラットフォームと構成でサポートされているわけではなく、代わりに何かが異なる可能性があることを覚えておいてください。

于 2009-05-02T18:09:04.480 に答える