(C) Mehrere Bewegungen, aber keine Threads?
Markus Pitha
- programmiertechnik
Hallo,
Zum besseren Verständis der Programmiertechnik bei einfach Spielen mit SDL habe ich mir vom Autor von SDL, Sam Lantiga, dieses einfache Spiel heruntergeladen, und mir den Quellcode angesehen. Dabei entdeckte ich, dass hier keine Threads verwendet wurden, obwohl es meherere Bewegungen gleichzeitig gibt. Warum funktioniert das? Ich hatte damals schon Probleme, zwei gleichzeitig agierende Grafiken zu steuern, wo ich um Threads nicht herum kam, wie vielleicht so mancher hier vielleicht noch in Erinnerung hat.
Ich habe zur besseren Übersicht den Quelltext des Spiels hochgeladen (http://test.pithax.net/aliens.c), wobei die Funktionen mit den wichtigen Programmabläufen, main und "RunGame", ganz unten zu finden sind.
Markus.
你好 Markus,
Dabei entdeckte ich, dass hier keine Threads verwendet wurden, obwohl
es meherere Bewegungen gleichzeitig gibt. Warum funktioniert das?
Es bewegt sich nicht wirklich, sondern nur quasi gleichzeitig. Ein Alien
wird bewegt, der Screen wird neu gemalt. Der Player wird bewegt, der
Screen wird neu gemalt. Das passiert so schnell, dass du gar nicht
mitbekommst, dass das eigentlich alles nacheinander und nicht gleichzeitig
passiert.
再见,
克里斯蒂安
Hallo,
danke, aber ob das aber mit der Maus als Steuerung auch so funktioniert, muss ich mir noch ansehen. Ich habe gerade erkannt, dass die Ereignisse, nicht innerhalb von
while ( SDL_PollEvent(&event) ) {
if ( event.type == SDL_QUIT )
return;
}
abgefragt werden, so wie es mir bisher alle Tutorials verklickert haben, sondern der Tastendruck bei
keys = SDL_GetKeyState(NULL);
zugewiesen wird und später bearbeitet wird. (Der Autor wird's wohl sicher besser wissen :) )
Mal sehen, ob man das auf die Maus auch so einfach umsetzen kann, aber ich denke schon. Bei mir war nämlich bisher immer das Problem, dass die while-Schleife ständig den Status der Maus abfragte, und somit das Programm nicht mehr fähig war, andere Aufgaben zu verarbeiten, wodurch die Threads ins Spiel kamen. Anders ging es, glaube ich, auch nicht, da ich sonst die Maus "verlor", aber das muss ich mir bei Gelegenheit noch genau ansehen.
Markus.