Spiele-Programmierung



  • Danke für alle Antworten!

    Ich müsste aber trotzdem wissen wie ich DirectX in MSVC++ 2008 einbinde, da ich damit sonst gar nichts machen kann :).

    Ist doch irgenwie Logisch... 😉

    (SFML bekomme ich schon hin)



  • cobra11freak schrieb:

    Aber von "Matritzen" habe ich zB noch nie was gehört...
    (Vieleicht liegt das daran das ich nicht besonders gut in Mathe bin 😞 )

    Dann fang erst mal damit an, dass du in mathe gut wirsd. Ohne ausreichende Mathematikkentnisse wirsd du nie auch nur ansatzweise Spiele programmieren können. Egal ob 2D oder 3D, Mathe ist überall NOTWENDIG.



  • Learning by doing... lasst ihn doch.


  • Mod

    ceplusplus@loggedoff schrieb:

    Learning by doing... lasst ihn doch.

    bin auch der meinung. jeder soll es probieren, irgendwann wird man beim programmieren doch bei mathe landen und weil es keine trockene theorie ist, merkt man es vielleicht garnicht und hat spass 🙂



  • So ich habe mir jezt dieses SFML runtergeladen...
    Ich habe es wieder in Visual C++ 2008 eingebunden, das klappt aber nicht...
    (Natürlich habe ich die Libary's eingebunden und die Include Verzeichnisse von SFML)
    Mein einfacher Quelltext:

    #include "stdafx.h"
    #include "SFML.h"
    #include <SFML/Window.hpp>
    
    int main()
    {
    
        sf::Window App(sf::VideoMode(800, 600, 32), "SFML Window");
    
        bool Running = true;
        while (Running)
        {
            App.Display();
        }
    
        return EXIT_SUCCESS;
    }
    

    Das Erbgebnis:

    1>------ Erstellen gestartet: Projekt: SFML, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>SFML.cpp
    1>Ressourcen werden kompiliert...
    1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
    1>Copyright (C) Microsoft Corporation.  All rights reserved.
    1>Manifest in Ressourcen wird kompiliert...
    1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
    1>Copyright (C) Microsoft Corporation.  All rights reserved.
    1>Verknüpfen...
    1>SFML.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual __thiscall sf::Window::~Window(void)" (??1Window@sf@@UAE@XZ)" in Funktion "_main".
    1>SFML.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall sf::Window::Display(void)" (?Display@Window@sf@@QAEXXZ)" in Funktion "_main".
    1>SFML.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall sf::Window::Window(class sf::VideoMode,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,unsigned long,struct sf::WindowSettings const &)" (??0Window@sf@@QAE@VVideoMode@1@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@KABUWindowSettings@1@@Z)" in Funktion "_main".
    1>SFML.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall sf::VideoMode::VideoMode(unsigned int,unsigned int,unsigned int)" (??0VideoMode@sf@@QAE@III@Z)" in Funktion "_main".
    1>MSVCRTD.lib(crtexew.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_WinMain@16" in Funktion "___tmainCRTStartup".
    1>C:\Dokumente und Einstellungen\Vincent-Silver\Eigene Dateien\Visual Studio 2008\Projects\SFML\Debug\SFML.exe : fatal error LNK1120: 5 nicht aufgelöste externe Verweise.
    1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Vincent-Silver\Eigene Dateien\Visual Studio 2008\Projects\SFML\SFML\Debug\BuildLog.htm" gespeichert.
    1>SFML - 6 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    

    Bitte helft mir mal, ich scheck das nicht mit Visual C++ 2008 😃



  • omg, das forum :o

    gibt's bei dir auch eine

    WinMain()
    

    ? 🙂



  • Bist du dir sicher, dass du die richtigen Bibliotheken eingebunden hast?
    Eventuell musst du SFML auf deinem Compiler neu kompilieren. Öffne dazu die Projektmappe SFML.sln im Installationsverzeichnis und erstelle sie neu mit der gewünschten Konfiguration.

    In deinem eigenen Projekt müssen die eingebundenen Bibliotheken dem Linker bekannt gemacht werden: Im Debug-Modus muss bei Projekt -> Projekt-Eigenschaften -> Konfigurationseigenschafen -> Linker -> Eingabe Folgendes in dieser Reihenfolge stehen:

    sfml-window-s-d.lib sfml-system-s-d.lib sfml-graphics-s-d.lib
    

    (wobei du das letzte evtl. noch nicht brauchst, aber sicher später)

    Im Release-Modus wäre das so:

    sfml-graphics-s.lib sfml-window-s.lib sfml-system-s.lib
    

    Das gilt, wenn du SFML statisch rekompiliert hast. Ansonsten entfällt jeweils das "-s".

    Das mit WinMain() ist bei SFML eigentlich nicht nötig, ich könnte mir vorstellen, dass die Fehlermeldung aus den anderen Linkerfehlern resultiert.



  • Na das mit dem WinMain() ist ja wohl der größte Schwachsinn 😃
    Das ergiebt niemals einen Linker Error...(Verbessert mich)
    Also wenn ich das so mache wie Nexus dann kommt beim selben Code das...

    1>------ Erstellen gestartet: Projekt: SFML, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>SFML.cpp
    1>Verknüpfen...
    1>LINK : warning LNK4044: Nicht erkannte Option /d.lib; wird ignoriert.
    1>LINK : fatal error LNK1104: Datei "sfml-window.obj" kann nicht geöffnet werden.
    1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\*******\Eigene Dateien\Visual Studio 2008\Projects\SFML\SFML\Debug\BuildLog.htm" gespeichert.
    1>SFML - 1 Fehler, 1 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    Ich bin übrigens im Debug Modus und habe das da eingegeben
    [code]
    sfml-window -d.lib sfml-system-d.lib sfml-graphics-d.lib
    


  • cobra11freak schrieb:

    sfml-window -d.lib
    

    Könnte der Abstand zwischen "window" und "-d" den Fehler verursachen oder ist das nur ein Schreibfehler? Und hast du SFML jetzt rekompiliert (also die heruntergeladene Projektmappe, nicht dein eigenes Projekt)?



  • Ich hab das jezt mit dem -d anders gemacht...
    Das gibt das:

    1>------ Erstellen gestartet: Projekt: SFML, Konfiguration: Debug Win32 ------
    1>Verknüpfen...
    1>MSVCRTD.lib(crtexew.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_WinMain@16" in Funktion "___tmainCRTStartup".
    1>C:\Dokumente und Einstellungen\Vincent-Silver\Eigene Dateien\Visual Studio 2008\Projects\SFML\Debug\SFML.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
    1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Vincent-Silver\Eigene Dateien\Visual Studio 2008\Projects\SFML\SFML\Debug\BuildLog.htm" gespeichert.
    1>SFML - 2 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    

    Hast du Visual C++ 2005 oder auch 2008.
    Ich find das irgendwie nicht gut. Ständig irgendwelche Fehler...:(
    Oder liegt das an mir?



  • cobra11freak schrieb:

    Ich hab das jezt mit dem -d anders gemacht...

    Wie anders? Werd ein bisschen genauer. Du solltest folgende Punkte beachten:

    • Lade dir SFML 1.3 herunter, damit du sicher eine funktionierende Version hast.
    • Rekompiliere endlich die SFML-Projektmappe (...\SFML\build\vc2008\SFML.sln) mit der gewünschten Konfiguration.
    • Ergänze bei den Optionen die Verzeichnisse so, dass alle benötigten SFML-Bibliotheken gefunden werden
    • Füge die Linker-Abhängigkeiten zu den Projekt-Eigenschaften hinzu, und zwar abhängig von deiner Konfiguration (Release/Debug, statisch/dynamisch).
    • Erstelle dein eigenes Projekt neu.

    cobra11freak schrieb:

    Hast du Visual C++ 2005 oder auch 2008.
    Ich find das irgendwie nicht gut. Ständig irgendwelche Fehler...:(
    Oder liegt das an mir?

    Ja, ich benutze VC++ 2008 Express. Am Anfang musste ich mich auch mit diesen Linkerfehlern herumschlagen. Aber wird schon gehen 😉



  • cobra11freak schrieb:

    Na das mit dem WinMain() ist ja wohl der größte Schwachsinn 😃
    Das ergiebt niemals einen Linker Error...(Verbessert mich)

    soso, ich sehe jetzt aber schon zwei buildlogs, die sich darüber beschweren 🙂 das war auch nicht ein hinweis, das du eine WinMain() in der bibliothek, die du versuchst zu bauen, brauchst, sondern mehr ein wink mit dem zaunpfahl, dass eine bibliothek auch als bibliothek gelinkt werden sollte. 🙂



  • Also ersmal Danke für die Hilfe:)
    Jezt Kompieliert er das ganze und LINKT es korrekt.
    Es lag wohl an der WinMain(), da hatte ich unrecht 😞
    Aber beim starten des Programmes kommt die Fehlermeldung das die dll "sfml-window-d" nicht gefunden wurde.
    Vieleicht lasse ich das mit dem -d Weg.
    Ich habe SFML rekompieliert und dann ne WinMain() Funktion daraus gemacht.
    Liegt vieleicht daran das ich eine Win32 Anwendung gemacht habe und keine Konsolen
    Anwendung 😉



  • .<



  • cobra11freak schrieb:

    Also ersmal Danke für die Hilfe:)
    Jezt Kompieliert er das ganze und LINKT es korrekt.
    Es lag wohl an der WinMain(), da hatte ich unrecht 😞
    Aber beim starten des Programmes kommt die Fehlermeldung das die dll "sfml-window-d" nicht gefunden wurde.
    Vieleicht lasse ich das mit dem -d Weg.
    Ich habe SFML rekompieliert und dann ne WinMain() Funktion daraus gemacht.
    Liegt vieleicht daran das ich eine Win32 Anwendung gemacht habe und keine Konsolen
    Anwendung 😉

    Mit der WinMain sollte das egtl. gar nix zu tun haben. Die Compilerfehler sehen sehr nach einfach falsch gelinkten libss aus. Wieso linkst du die dynamischen? Probiers ma mit den statischen libss (sind im gleichen Verzeichnis wie die dynamischen und werden mitgeliefert) [einfach sfml-xxxxx.lib ohne -d einbinden].

    Windows braucht für deine libs noch die DLLs. Windows sucht nach den DLLs in 2 Verzeichnissen, einmal im Verzeichnis in dem deine Anwendung zu finden ist (also die *.exe) und in x:\Windows\System32 . Schau mal in das Verzeichnis in das du die SFML entpackt hast. im lib ordner dort sind die jeweiligen dlls.



  • Seit v1.3 heißen die statischen libs so:

    Debug                Release
    sfml-window-[b]s[/b]-d.lib und sfml-windows-[b]s[/b].lib
    

    MfG



  • So es geht jezt...:)
    Allerdings habe ich jezt ein anderes Problem:
    Das Fenster öffnet sich nicht und der Debugger sagt das:

    Der Thread 'Win32 Thread' (0x13f0) hat mit Code 1 (0x1) geendet.
    Das Programm "[3928] SFML.exe: Systemeigen" wurde mit Code 1 (0x1) beendet.
    

    Der Quelltext hat sich mittlerweile auch geändert...

    #include "stdafx.h"
    #include "SFML.h"
    #include <SFML/Window.hpp>
    #include <SFML/Graphics.hpp>
    
    int WINAPI WinMain (HINSTANCE hThisInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpszArgument,
                        int nFunsterStil)
    {
        sf::RenderWindow App(sf::VideoMode(800, 600, 32), "SFML Graphics");
        sf::Image Image;
        if (!Image.LoadFromFile("sprite.tga"))
            return EXIT_FAILURE;
    
        sf::Sprite Sprite(Image);
    
        Sprite.SetColor(sf::Color(0, 255, 255, 128));
        Sprite.SetPosition(200.f, 100.f);
        Sprite.SetScale(2.f, 2.f);
    
        while (App.IsOpened())
        {
    
            sf::Event Event;
            while (App.GetEvent(Event))
            {
                // Close window : exit
                if (Event.Type == sf::Event::Closed)
                    App.Close();
            }
    
            float ElapsedTime = App.GetFrameTime();
    
            if (App.GetInput().IsKeyDown(sf::Key::Left))  Sprite.Move(-100 * ElapsedTime, 0);
            if (App.GetInput().IsKeyDown(sf::Key::Right)) Sprite.Move( 100 * ElapsedTime, 0);
            if (App.GetInput().IsKeyDown(sf::Key::Up))    Sprite.Move(0, -100 * ElapsedTime);
            if (App.GetInput().IsKeyDown(sf::Key::Down))  Sprite.Move(0,  100 * ElapsedTime);
    
            if (App.GetInput().IsKeyDown(sf::Key::Add))      Sprite.Rotate(- 100 * ElapsedTime);
            if (App.GetInput().IsKeyDown(sf::Key::Subtract)) Sprite.Rotate(+ 100 * ElapsedTime);
    
            App.Draw(Sprite);
    
            App.Display();
        }
    
        return EXIT_SUCCESS;
    }
    


  • Also so schwer ist das doch nun auch wieder nicht.

    Es gibt da ein ganz einfaches Anfänger Tutorial für directx und cpp.

    Einfach mal auf gidf.de gucken und da directx und c++ eintippen. Nicht immer die Leute in den Foren nerven mit so einfachen Fragen.

    LG



  • Wenn du eine Win32 Anwendung erstellt hast, musst du vielleicht so vorgehen:

    http://www.sfml-dev.org/tutorials/1.3/graphics-win32.php

    Aber mach doch einfach mal ne Konsolenanwendung, für'n Anfang...

    MfG



  • Hi!
    Ich hab es jezt endlich hinbekommen...:)
    Das Problem mit der dll hab ich so gelöst in dem ich die dll's von SFML in mein Projekt-Verzeichniss gepackt habe!
    Jezt geht es alles 😃

    Vielen Dank euch Allen!

    MfG cobra11freak


Anmelden zum Antworten