Pregunta

Estoy decidiendo a hacer mi primer juego, va a ser simple pero quiero usar c ++ y elegí SDL para mi aprendizaje. Así que mi pregunta es acerca de cómo " buffers " Se manejan al escribir código. Publicaré mi código relacionado en la parte inferior.

Bien, básicamente, según entiendo, es porque SDL se ocupa de qué búfer se está dibujando en la pantalla. Cuando escribo en un búfer, siempre es el backbuffer al que estoy escribiendo o el búfer que no se está dibujando en la pantalla. Entonces, cuando llamo a SDL_Flip (pantalla), " blits " la superficie de mi pantalla en el backbuffer, luego mueve el puntero al que se está dibujando el buffer hacia el buffer que solía ser el backbuffer, en el que había estado trabajando, y el antiguo buffer que se estaba mostrando ahora se convierte en el backbuffer. En este punto, si llamo a SDL_FillRect (argumentos), ¿se realizará en el búfer de ahora atrás?

Voy a publicar todo mi " latido del corazón " de mi juego de aprendizaje, ya que puede ayudar a aclarar mi pregunta:

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

Solución

depende en gran medida del sistema (es decir, X11, buffer de cuadros de Linux, Windows), y el SDL de backend utiliza para interactuar con él. También qué marcas pasas a SDL_SetVideoMode. Básicamente, hay superficies de software que se ubican en una región de la memoria en su programa y superficies de hardware que se colocan en la memoria de la tarjeta gráfica. Lo que usted describe parece ser un búfer doble, que se habilita si pasa SDL_HWSURFACE | SDL_DOUBLEBUF a SDL. Solo recuerde que esto no es compatible con todas las plataformas y configuraciones y que puede obtener algo diferente en su lugar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top