Frage

Ich bin mit der Entscheidung zu tun, mein erstes Spiel, seine einfach, aber ich möchte mit c++ und ich wählte SDL für mein lernen.Also meine Frage ist etwa, wie die "Puffer" behandelt werden, wenn Sie code schreiben.Ich poste meinen code unten.

Ok, also im Grunde die Art, wie ich es verstehe, ist, dass SDL kümmert sich um die Puffer ist tatsächlich auf den Bildschirm gezeichnet.Wenn ich Schreibe, um einen Puffer ist stets der backbuffer ich Schreibe, oder der Puffer, die derzeit nicht auf dem Bildschirm gezeichnet.Also, wenn ich rufe SDL_Flip(screen) "blits" meinen screen-Oberfläche auf den backbuffer, dann bewegt sich der Zeiger, um die Puffer gezeichnet wird, um die Puffer, die verwendet werden, um den backbuffer, die ich hatte, und die alten Puffer, zeigte nun wird der backbuffer.An diesem Punkt, wenn ich rufe SDL_FillRect(Argumente) ausgeführt werden, auf der sich jetzt wieder-Puffer?

Ich werde post meine komplette "heartbeat" - mein Lern-Spiel-wie kann es helfen, zu klären, meine Frage:

//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;
    }
}
War es hilfreich?

Lösung

es hängt stark davon ab, Ihr system (ie.X11, Linux frame buffer, Windows), und die backend-SDL verwendet, um zu interagieren mit es.Auch die flags, die Sie passs auf SDL_SetVideoMode.Grundsätzlich gibt es software-Oberflächen, die sich in einem Bereich des Arbeitsspeichers, in der Sie Programm-und hardware-Oberflächen, die sind platziert in der grafischen Karte Speicher.Was Sie beschreiben, scheint mir ein Doppel-Puffer, die ist aktiviert, wenn Sie pass SDL_HWSURFACE | SDL_DOUBLEBUF zu SDL.Denken Sie daran, dies ist nicht unterstützt auf allen Plattformen und Konfigurationen, und Sie erhalten möglicherweise etwas anderes statt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top