Sprite auf dem Bildschirm



  • Hallo,

    was muss ich tun, damit ich ohne große mühe ein Sprite auf dem Bildschirm bewegen kann.
    Denn ich würde gerne mal ein einfaches 2D Spiel machen und nen Viereck bewegen ist da ja schon mal ein Anfang.^^



  • SDL.



  • SFML, wenn du C++ nutzen willst.



  • Prinzipell gesehen auch mit der WINAPI, für Animationen Double Buffering eingebaut und fertig ist die Kiste...



  • Direct3D -, kann dir dazu auch das Buch von Christian Rousselle empfehlen :p



  • Bleibt dann wohl Ansichtssache, ob WinAPI oder Direct3D die Maßgabe "ohne große Mühe" erfüllen 😉





  • für den wirklichen anfang würde ich dir auf jedenfall SFML empfehlen.

    wichtig: benutzt SDL nicht! die lib ist in c geschrieben und das interface somit vollkommen veraltet. zudem ist SDL SEHR langsam. in benchmarks zeigt sich, dass sfml (grade wenn es darum geht viel zu zeichnen, also mehrere 1000 sprites auf einmal) bis zu 1.000 mal schneller ist.

    leute, die dir immernoch SDL empfehlen, haben noch nicht lange genug mit sfml gearbeitet. die lib verdient viel mehr anerkennung, da sie imho meilenweit besser ist als sdl. mehr features und schneller - in allen bereichen, von netzwerk über audio bis hin zur grafik (z.B. sehr einfaches einbinden von Shadern!). nimm sfml!

    der einstieg ist auch sehr sehr einfach. ein einfaches starterprogramm, um ein irgendein bild anzuzeigen ist auch sehr kurz:

    #include <sfml/window.hpp>
    #include <sfml/graphics.hpp>
    
    int main()
    {
      //Fenster öffnen
      sf::VideoMode aufloesung(800,600,32); //x,y und bits per pixel also farbtiefe
      sf::RenderWindow myWindow(aufloesung,"mein fenstertitel",sf::Style::Fullscreen);
    
      //Sprite laden
      sf::Image i; 
      i.LoadFromFile("lalala.bmp");
      sf::Sprite sprite; 
      sprite.SetPosition(400,400); 
      sprite.SetImage(i);
    
      //Eventschleife [tastendrücke etc]
    
      bool programm_laeuft_noch = true;
    
      sf::Event e; //Zum Speichern der Events
      while(programm_laeuft_noch)
      {
           myWindow.Clear(); //Bildschirm "klären", also alles mit Schwarz übermalen
           while(myWindow.GetEvent(e))
           {
              if(e.Type == sf::Key::KeyPressed)
                 programm_laeuft_noch = false;
           }
    
           myWindow.Draw(sprite);
           myWindow.Display();
      }
      return 0;
    }
    

    Zudem wird SFML auch kräftig supportet, über das offizielle Forum erreichst du jederzeit den einzigen Entwickler - Laurent Gomila ( http://www.sfml-dev.org/forum/ )

    Du findest auf der SFML Seite auch offizielle Tutorials für jeden der Unterbereiche von SFML, also System - "Fenster", also Fenstererstellung und Eingabenabfrage - Netzwerk - Grafik und Sound (http://www.sfml-dev.org/tutorials/)

    Verzichte auf SDL, das ist veraltet und langsam.



  • TravisG schrieb:

    für den wirklichen anfang würde ich dir auf jedenfall SFML empfehlen.

    wichtig: benutzt SDL nicht! die lib ist in c geschrieben und das interface somit vollkommen veraltet. zudem ist SDL SEHR langsam. in benchmarks zeigt sich, dass sfml (grade wenn es darum geht viel zu zeichnen, also mehrere 1000 sprites auf einmal) bis zu 1.000 mal schneller ist.

    leute, die dir immernoch SDL empfehlen, haben noch nicht lange genug mit sfml gearbeitet. die lib verdient viel mehr anerkennung, da sie imho meilenweit besser ist als sdl. mehr features und schneller - in allen bereichen, von netzwerk über audio bis hin zur grafik (z.B. sehr einfaches einbinden von Shadern!). nimm sfml!

    Volle Zustimmung! 👍

    Lange gab es kein richtiges 2D-Framework für C++, da nahm man eben SDL. Aber jetzt gibt es eigentlich wirklich kaum noch einen Grund dafür (abgesehen von der Unterstützung gewisser exotischer Plattformen). Selbst wenn man C programmiert, kann man das C-Binding von SFML nutzen und dessen Vorteile geniessen.

    Man merkt auch, dass der Entwickler von SFML mit Herzblut bei seinem Projekt ist und ihm die Wünsche der Community wichtig sind.



  • Um nochwas hinzuzufügen: Man wird dir DirectX (DirectGraphics) oder OpenGL empfehlen - lass auch davon die Finger. Wenn du einfach nur kleine Games machen willst, dann wäre ein eigenes Aufbauen eines Frameworks rund um DX oder OGL nur Zeitverschwendung, da es jemand anderes (in diesem Fall: SFML) eh schon besser gemacht und zur Verfügung gestellt hat.

    Irgendwann wird dich interessieren, was hinter diesen Frameworks steckt, dann kannst du mit DXG oder OGL und natürlich irgenwelchen libs für die anderen Bereiche von Multimediaframeworks (Netzwerk, Audio) anfangen, für deine Ansprüche jetzt ist SFML jedoch eindeutig besser.



  • TravisG schrieb:

    zudem ist SDL SEHR langsam. in benchmarks zeigt sich, dass sfml (grade wenn es darum geht viel zu zeichnen, also mehrere 1000 sprites auf einmal) bis zu 1.000 mal schneller ist.

    Wenn man auch bei SDL Hardware-Surfaces nutzt, dann ist der Unterschied längst nicht mehr so gravierend.

    Aber alles in Allem kann man nur zu SFML raten.

    Ein kleines, aber wachsendes deutsches Forum kannst du unter http://sfml-dev.de/ finden.


Anmelden zum Antworten