SDL2 Haupt-game-loop
Meine Frage rausgeknallt beim Lesen der tutorials auf SDL2, auf lazyfoo.net und der code wird kopiert von auf dieser Seite
int main( int argc, char* args[] )
{
//Start up SDL and create window
if( !init() )
{
printf( "Failed to initialize!\n" );
}
else
{
//Load media
if( !loadMedia() )
{
printf( "Failed to load media!\n" );
}
else
{
//Main loop flag
bool quit = false;
//Event handler
SDL_Event e;
//While application is running
while( !quit )
{
//Handle events on queue
while( SDL_PollEvent( &e ) != 0 )
{
//User requests quit
if( e.type == SDL_QUIT )
{
quit = true;
}
}
//Clear screen
SDL_RenderClear( gRenderer );
//Render texture to screen
SDL_RenderCopy( gRenderer, gTexture, NULL, NULL );
//Update screen
SDL_RenderPresent( gRenderer );
}
}
}
//Free resources and close SDL
close();
return 0;
}
Hier, warum sind wir Rendern der Effekte innerhalb der main-Schleife und es läuft wieder und wieder, anstatt wie:
int main( int argc, char* args[] )
{
//Start up SDL and create window
if( !init() )
{
printf( "Failed to initialize!\n" );
}
else
{
//Load media
if( !loadMedia() )
{
printf( "Failed to load media!\n" );
}
else
{
//Main loop flag
bool quit = false;
//Event handler
SDL_Event e;
//Clear screen
SDL_RenderClear( gRenderer );
//Render texture to screen
SDL_RenderCopy( gRenderer, gTexture, NULL, NULL );
//Update screen
SDL_RenderPresent( gRenderer );
//While application is running
while( !quit )
{
//Handle events on queue
while( SDL_PollEvent( &e ) != 0 )
{
//User requests quit
if( e.type == SDL_QUIT )
{
quit = true;
}
}
}
}
}
//Free resources and close SDL
close();
return 0;
}
Ich nehme an, es gibt einen Grund, da diese in vielen Lehrbüchern.
Aber ich bin nicht in der Lage, um die Grund.
Wollte nur erwähnen das
SDL_QUIT
Ereignis wird generiert, indem Sie auf die X
- Symbol auf der rechten oberen Ecke des SDL-Fenster, nicht durch drücken der Escape-Taste.InformationsquelleAutor Sagar Kar | 2015-06-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Machen Sie den Bildschirm wieder und wieder, weil in der Regel Dinge, die am Bildschirm dargestellt werden, verändern. Zur Darstellung dieser änderungen, die Sie benötigen, um die Anzeige zu aktualisieren. Zum Beispiel, wenn ein ball über den Bildschirm bewegen und Sie nur leisten Sie den Bildschirm einmal, den ball nicht zu bewegen scheinen. Allerdings, wenn Sie weiterhin "laufen wieder und wieder," dann werden Sie in der Lage zu sehen, dass der ball über den Bildschirm bewegt.
Der Punkt dieses tutorial zeigt Ihnen, wie Sie das Rendern einer textur, in dieser Art von Anwendung, die Sie könnte gelten jetzt auch für übersetzungen oder Rotationen und die Veränderungen beobachten. Der Sinn dieses tutorials ist nicht einfach zu Rendern einer textur und sein getan mit es, die eine Vereinfachung eines komplexeren Programms. Sie können es genau so machen, für das bestimmte Beispiel, Rendern, einmal, aber in der Regel eine grafische Anwendung halten Zeichnung selbst. Wenn Sie wirklich lieben Zeichnung nur einmal, man kann es so machen, den Antrag nur macht, WENN es eine änderung gab, das ist bis zu Ihnen, wie zu implementieren.
Kar Es gibt zwei Arten der übertragung, Passive und Aktive. Passive rendering rendert nur den Bildschirm aus, wenn es nötig ist. Dieser Ansatz wird meist verwendet im Fenster-GUI-Anwendungen mit Steuerelementen und nicht dynamisch animierte Dinge. Im passiv-rendering, der Bildschirm muss noch selbst aktualisieren, nur nicht auf eine Uhr-wie für die basis. Active rendering verwendet in Sachen wie video-Spiele zu ständig aktualisieren Sie den Bildschirm. Hier ist ein guter Artikel beschreibt die Unterschiede zwischen active-und passive-rendering.
Dank guiz, war hilfsbereit @joseph
InformationsquelleAutor Joseph Hutchinson
Lazyfoo die tutorials sind ziemlich gut, ich würde sagen, bleiben Sie dabei.
Aus irgendeinem Grund den Unterricht auf die update-Zeit und frame-raten sind 24 und 25, die ich würde sagen ist ein bisschen spät aber Sie sind da.
Wie ich schon in den Kommentar, es ist Ereignisgesteuerte Programmierung. Die main-loop Lesen sollten Ereignisse wie Tastendrücke und Mausklicks, aktualisieren Sie Ihre Anwendung mit, wie viel Zeit vergangen ist seit dem letzten update und dann Rendern. Dies passiert X-mal pro Sekunde, was der Bildrate.
Dieser code wird in einer Art und Weise, in denen es später acommodate dieser Zeit überprüfen, aber die Lektion kommt später.
Dies ist ein Beispiel für eine sehr einfache main-loop.
InformationsquelleAutor aslg