Spiele-Programmierung
-
Mit C++ kann man sehr wohl einfache, performante und auch noch gute kleine Spiele entwickeln. Für die 2D-Grafikprogrammierung rate ich dir unbedingt zu der Grafikbibliothek SFML, die relativ neu ist. Ich habe vor einigen Monaten damit angefangen und habe sehr gute Erfahrungen gemacht. Sie ist wirklich relativ einfach zu handhaben, bietet sehr viele Funktionen und ist auch noch ziemlich schnell. Auf der Seite http://www.sfml-dev.org/ kannst du die Bibliothek downloaden, und dort gibt es auch Tutorials für den Einstieg und ein Forum.
-
Tag nochmal!
SFML klingt ganz gut für 2D spiele aber ist der Eistieg in DirectX dann einfacher?
Also ich kann mir das nicht vorstellen!(Aber es kann ja sein)
Aber es muss doch trotzdem machbar sein DirectX in MSVC++ 2008 einzubinden.
Es muss doch irgendjemanden geben der das schon mal gemacht hat.
Und dann wüsste ich immer noch gerne wie ich das erlernen soll.
Auf jeden fall downloade ich mir mal dieses SFML.MfG cobra11freak
-
cobra11freak schrieb:
Und dann wüsste ich immer noch gerne wie ich das erlernen soll.
parallel Dokumentation lesen, Artikel über DirectX, ein Buch und nebenbei Testprojekte schreiben. Artikel z.B. auch wie der Weg von 3D zu 2D funktioniert. Dann die ganze Reihe der bekannten Clone nachbauen: Pong, Snake, Tetris, Asteroids. Es kann auch nicht schaden immer wieder die entsprechenden dazu benötigten Techniken genauer durchleuchten (z.B. Wikipedia-Artikel)
Man lernt durch Wiederholung.
-
cobra11freak schrieb:
SFML klingt ganz gut für 2D spiele aber ist der Eistieg in DirectX dann einfacher?
Also ich kann mir das nicht vorstellen!(Aber es kann ja sein)Ganz bestimmt. Nur schon, weil du dann besser verstehst, wie überhaupt etwas auf dem Bildschirm gezeichnet wird. DirectX baut allerdings nicht direkt auf SFML auf, du wirst also nicht darum herum kommen, vieles neu zu lernen und dich umzugewöhnen. Trotzdem finde ich es ratsam, am Anfang kleine 2D-Spiele selber zu programmieren. Dann repetierst du auch gleich die Grundlagen von C++ und lernst immer dazu. Aber auch Grundlagen der Grafikprogrammierung sind sicher von Nutzen. Als krönenden Abschluss kannst du ja ein eigenes kleines Jump'n'Run implementieren, dann fühlst du dich auch gleich viel sicherer

Das Wichtigste ist allerdings, nichts zu überstürzen. Mach die Tutorials aufmerksam durch, erstelle Fenster, zeichne Sprites, lass sie rotieren und verfärben, und lerne immer mehr dazu. Mit grösseren Projekten wirst du auch vermehrt wieder die C++-Standardbibliothek und Grundlagen der Sprache benötigen; du wirst dir auch Überlegungen zum Design und zur Strukturierung der Spiele anstellen müssen, und so wird dein Wissen wiederum erweitert. Alles Dinge, die dir bei DirectX sicherlich helfen werden.
Auf jeden Fall viel Spass beim Programmieren

-
Hi cobra11freak,
also DirectX im Selbstversuch zu lernen halte ich dann doch für extrem schwierig.

Ich kann Dir mal folgendes Buch von André Lamothe empfehlen:
Dort wird alles beschrieben was man für ein 2D-Game benötigt.
Viel Spaß
HeckyDA
-
Ich habe mal diese SFML Tutorials angeschaut. Macht einen interessanten Eindruck. Hat jemand damit ein komplexes 2D-Spiel gebaut? Links zu Bildern?
-
Beim offiziellen SFML-Forum gibt es einen Bereich für Projekte:
http://www.sfml-dev.org/forum/viewforum.php?f=10&sid=b9102e8bbfcbe58fc79311a4f312a7c8
-
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.
-
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.libDas 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.libKö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