Markus Pitha: (C) Mehrere Bewegungen, aber keine Threads?

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.

--
http://www.apostrophitis.at
http://www.pithax.net
Wenn ich ein toller Programmierer währe, könnte ich vieleicht sogar Packete nach einem gewissen Standart kompelieren...
Vieleicht progge ich aber auch eine tolle Gallerie, die dann hoffentlich funzt.
  1. 你好 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.

    再见,
     克里斯蒂安

    --
    Neues Plugin: mod_asciiart | Opera 8.10 für Gentoo über Portage
    Unsere Vorstellungen von der Ewigkeit sind genauso nuetlich wie die Mutmassungen eines Kuehkens ueber die Aussenwelt bevor es die Eierschale aufbricht.
    http://wwwtech.de/
    1. 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.

      --
      http://www.apostrophitis.at
      http://www.pithax.net
      Wenn ich ein toller Programmierer währe, könnte ich vieleicht sogar Packete nach einem gewissen Standart kompelieren...
      Vieleicht progge ich aber auch eine tolle Gallerie, die dann hoffentlich funzt.