Erstes Spiel bzw. erste Grafikanwendung



  • Also, bei SFML ist es so, dass sämtliche Libs, die mit -s enden, statisch sind, d.h. deren Inhalt in die Exe mitreingelinkt wird. Die mit -d enthalten Debug-Informationen.

    Was kommt auf anderen Rechnern für eine Fehlermeldung?



  • Wenn du wirklich Erfahrung in C++ hättest, würdest du nicht Tetris zu
    Anfang schreiben wollen, dass ist ne ganz schöne Granate die de da vor
    hast...



  • way schrieb:

    Wenn du wirklich Erfahrung in C++ hättest, würdest du nicht Tetris zu
    Anfang schreiben wollen, dass ist ne ganz schöne Granate die de da vor
    hast...

    Was ist denn an tetris bitte schön so schwer?



  • mad_martin schrieb:

    Also, bei SFML ist es so, dass sämtliche Libs, die mit -s enden, statisch sind, d.h. deren Inhalt in die Exe mitreingelinkt wird. Die mit -d enthalten Debug-Informationen.

    Was kommt auf anderen Rechnern für eine Fehlermeldung?

    also als fehlermeldung kommt z.b. "Der Prozedureinsprung "_ftol2" wurde in der DLL "msvcrt.dll" nicht gefunden". Manchmal stürzt das Programm auch einfach ab oder der Bildschirm bleibt schwarz.
    desweiteren frag ich mich, wie ich das konsolenfenster, welches immer im hintergrund läuft, schließen kann?

    poste mal den Quellcode hier aber daran kann es ja eigentlich nicht liegen. Denke eher das es an der Libary liegt.

    #include <SFML/Graphics.hpp>
    #include <iostream>
    
    int main()
    {
    
        sf::RenderWindow App(sf::VideoMode(800, 600), "SFML Shapes");
    	sf::Shape Kreis1 = sf::Shape::Circle(150, 150, 40, sf::Color::White, 10, sf::Color::Blue);
    
    	sf::Shape linielinks = sf::Shape::Line(130,200,130,250,2,sf::Color::White,2,sf::Color::White);
    
    	sf::Shape Rechteck = sf::Shape::Rectangle(100,100,700,500,sf::Color::Black,5,sf::Color::White);
    
    	sf::String Text;
    	Text.SetPosition(10,10);
    	Text.SetText("Test");
    	Text.SetColor(sf::Color::White);
    	Text.SetFont(sf::Font::GetDefaultFont());
    	float posx=150.0f;
    	float posy=150.0f;
    	float posxx=0.25f;
    	float posyy=0.25f;
    
        while (App.IsOpened())
        {
            sf::Event Event;
            while (App.GetEvent(Event))
            {            
                if (Event.Type == sf::Event::Closed)
                    App.Close();
    			if(Event.Type == sf::Event::KeyPressed)
    			{
    				if (Event.Key.Code == sf::Key::F1)
    				{
    					sf::Image Screen = App.Capture();
    					Screen.SaveToFile("screenshot.jpg");
    				}
    				if (Event.Key.Code == sf::Key::Add)
    				{
    					if(posxx>0)
    						posxx=posxx+0.05f;
    					if(posyy<0)
    						posxx=posxx-0.05f;
    					if(posyy>0)
    						posyy=posyy+0.05f;
    					if(posyy<0)
    						posyy=posyy-0.05f;
    				}
    				if (Event.Key.Code == sf::Key::Subtract)
    				{
    					if(posxx>0)
    						posxx=posxx-0.05f;
    					if(posxx<0)
    						posxx=posxx+0.05f;
    					if(posyy>0)
    						posyy=posyy-0.05f;
    					if(posyy<0)
    						posyy=posyy+0.05f;
    				}
    			}
            }
    
    		App.Draw(Text);
    
    			Kreis1.Move(posxx,posyy);
    			posx=posx+posxx;
    			posy=posy+posyy;
    		if(posx>=650.0)
    			posxx=posxx*(-1.0f);
    		if(posx<=150.0)
    			posxx=posxx*(-1.0f);
    		if(posy>=450.0)
    			posyy=posyy*(-1.0f);
    		if(posy<=150.0)
    			posyy=posyy*(-1.0f);
    		App.Draw(Rechteck);
    		App.Draw(Kreis1);
    		App.Draw(linielinks);
            App.Display();
        }
    
        return EXIT_SUCCESS;
    }
    

    way schrieb:

    Wenn du wirklich Erfahrung in C++ hättest, würdest du nicht Tetris zu
    Anfang schreiben wollen, dass ist ne ganz schöne Granate die de da vor
    hast...

    Zu Tetris: Das ist ja auch nur ein Gedanke das es da mal drauf hinaus laufen soll und nicht das ich damit direkt anfangen will. steht da oben auch drin. Aber was du so schwer dran sein soll verstehe ich auch nicht. Aber gut, war ja auch nicht so die hilfreiche antwort



  • Also ich kann da nur SDL empfehlen für nen leichten / einfachen Einstieg ... Wenn ich hier seh das du 2 Seiten lang nur mit Fehlermeldungen zu kämpfen hast 👎 Kannst dir ja mal hier SDL Tutorials anschauen wenn du magst: http://www.robsite.de/tutorials.php?tut=sdl die von Marius Andra sind sehr gut erklärt.

    Hatt mein 2Player Pong damit an einem WE geschafft 🕶



  • Ich würde Dir auch den SDL empfehlen. Leicht zu programmieren, und man hat schnell Erfolgserlebnisse rund um die Themen Grafik, Animation, Eventhandling etc.

    Die Robsite Links haben mir auch geholfen. Imo ist das Wiki-Book sehr hilfreich, da dort auch SDL-TTF (Font-behandlung), SDL-Image und SDL-gfx behandelt werden.

    http://de.wikibooks.org/wiki/SDL



  • [propaganda]
    nimm sfml, vergiss sdl1!!!!!!!
    [/propaganda]



  • Peppie schrieb:

    Wenn ich hier seh das du 2 Seiten lang nur mit Fehlermeldungen zu kämpfen hast 👎

    Die Fehlermeldungen liegen nicht an der Bibliothek an sich, sondern an Vista64 + Visual Studio und DLL-Inkompatibilitäten. 👍

    Außerdem hat jontef geschrieben, dass er am liebsten C++ verwenden will. SFML ist rein in C++ geschrieben, deshalb eine gute Wahl. Unter dem Gesichtspunkt um Längen besser als SDL, was in C implementiert wurde.

    Was den einfachen Einstieg angeht: Ich habe beides ausprobiert und finde SFML geeigneter (gerade, weil ich als C++-Programmierer daran gegangen bin, und nicht als C-Programmierer). Schaut euch mal die Tutorials an und dann sagt mir nochmal, der Einstieg wäre schwer.

    @jontef:
    So, zurück zu deinem DLL-Problem. Es scheint also, als ob du die vorgefertigten DLLs nicht nutzen könntest. Kann passieren, bei Vista64 sogar wahrscheinlich.

    Also musst du die DLLs neukompilieren. Ist kein Problem. Geh in deinen SFML-Ordner. Da drin liegt (wenn du das Komplettpaket heruntergeladen hast) ein Ordner "Build". Da drin wählst du den zu deiner Version von VS passenden Ordner aus und öffnest die passende "SFML.sln".

    Nun wählst du aus der Menüleiste "Build - Batch Build" aus (keine Ahnung, wie das in der deutschen Version heißt, wahrscheinlich "Erstellen - Batch...". Hacken bei allen Items, die mit "sfml-" anfangen und Abfahrt.

    Nach dem Buildvorgang sollten dann - wenn alle Ordnereinstellungen stimmmen, davon gehe ich aus - direkt die neuen DLLs genutzt werden.

    Probier das mal aus und berichte von deinen Erfahrungen!

    Gib SFML 'ne Chance, du wirst sehen, es lohnt sich! 😉



  • ok habe alles so gemacht wie du es gesagt hast. hat auch alles einwandfrei geklappt. die anwendungen funktionieren jetzt auch so weit bei mir.
    nur wie bekomme ich die anwendungen auf anderen rechnern zum laufen ? muss ich da etwas mit dazu kopieren ? reicht es nicht wenn ich debug.exe rüber kopiere und die dort starte ?
    desweiteren wird bei mir immer ein dos fenster geöfnet sobald ich ein programm starte, ist es möglich dieses zu umgehen ?

    gruß und danke schon mal



  • Entweder du lieferst die CRT-DLLs mit oder du linkst die CRT statisch rein.

    Letzteres ist relativ einfach zu machen und auch keine schlechte Lösung (es gibt für beide Varianten Vor- und Nachteile).
    Eine gute Anleitung gibt's hier:
    http://blog.kalmbach-software.de/de/2008/03/05/wie-man-statisch-gegen-die-c-runtime-crt-linkt/

    Du musst nur beachten, dass du dies auch für SFML machst, also die Libraries von SFML nochmal neu erstellst, mit der gleichen Einstellung, wie du sie auch für dein eigenes Programm gemacht hast.

    Dann sollte eigentlich alles laufen 😉

    Das ist übrigens kein "Fehler" oder schlechtes Designkonzept von SFML, sondern hängt einzig und allein an dem von Microsoft im VS propagierten Konzept der DLLs...

    Achja, kleiner Tip noch:
    Die Debugversion deines Programmes ist nur für dich (und evtl. andere Entwickler gedacht). Wenn du das Programm weitergeben willst, solltest du es als Releaseversion erstellen!



  • danke erstmal für die hilfe. bin gerade dabei alles umzustellen. mal sehen ob es funktioniert. werd noch ein feedback geben.

    aber wie ist das jetzt mit dem konsolenfenster? kann ich das irgendwie schliessen bzw so einstellen das dieses nicht geöffnet wird? und wie bekommt man bei sfml nen menu oben in die leiste ?



  • eigentlich musst du nur ein Win32 Projekt erstellen und einen WinAPI einsprung machen das wars, so bekommste kein Konsolenfenster 👍



  • hört sich gut an, und wo mache ich den ? hab mit winapi noch nie was gemacht ?

    wenn ich das wie folgt mache, funktioniert es nicht

    int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance,
    LPSTR lpcmdline, int ncmdshow)
    


  • Mache ein leeres Win32-Project (also nicht Win32 Console, einfach das andere) und linke zur SFML-main.lib
    Die übernimmt den Einsprungpunkt für dich und du kannst ganz einfach mit

    int main (..) {
    ...
    }
    

    arbeiten.

    Zur Menüleiste:
    Da musst du dich wirklich mit der WinAPI auseinandersetzen. Denn SFML ist keine GUI-Bibliothek.


Anmelden zum Antworten