Pergunta

Estou decidindo fazer o meu primeiro jogo, que vai ser simples, mas eu quero usar c ++ e eu escolhi SDL para o meu aprendizado. Então, minha pergunta é sobre como os "buffers" são tratadas quando escrever código. Vou postar meu código relacionado na parte inferior.

Ok, então basicamente a maneira que eu entendo é que SDL cuida dos quais tampão está realmente sendo atraídos para a tela. Quando estou escrevendo para um buffer é sempre a backbuffer Estou escrevendo para, ou o buffer actualmente a ser desenhado na tela. Então, quando eu chamo SDL_Flip (tela) ele "blits" minha superfície da tela para o backbuffer, então move o ponteiro para que buffer está sendo atraído para esse buffer, que costumava ser o backbuffer, o que eu estava trabalhando, eo tampão de idade que foi mostrando torna-se agora o backbuffer. Neste ponto, se eu chamo SDL_FillRect (argumentos) que será realizada no agora de volta tampão?

Eu vou postar todo o meu "coração" do meu jogo de aprendizagem, uma vez que pode ajudar a esclarecer a minha pergunta:

//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;
    }
}
Foi útil?

Solução

altamente depende do seu sistema (ie. X11, Linux frame buffer, Windows), e os usos backend SDL para interagir com ele. Também qual bandeiras você passs para SDL_SetVideoMode. Existem basicamente superfícies de software que sentar-se em uma região da memória em que você programa e superfícies de hardware que são colocados na memória do cartão gráfico. O que você descreve parece-me ser um buffer duplo, que é ativado se você passar SDL_HWSURFACE | SDL_DOUBLEBUF a SDL. Basta lembrar isto não é suportado em todas as plataformas e configurações e você pode obter algo diferente em seu lugar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top