Leitfaden/Starthilfe zum Spiele programmieren
-
Positiv schrieb:
Naja, was ist denn die Definition von "programmieren können"?
Na ja, dass man eben in der Lage ist einfach die Doku zu lesen und kein Tutorial/Buch mehr für alles braucht. Jedenfalls keines das jedes Detail erklärt. Einstieg <-> Mitte <-> Spezieller Kram. Die Mitte solltest du mit der Doku selbst schaffen können.
Positiv schrieb:
Könntet ihr mir auch ein paar der größten Vor- bzw Nachteile nennen? Wär toll.
Da muss man unterscheiden, SFML kann viele Dinge und man muss nicht alle nutzen. Dich dürfte primär der Grafikteil interessieren, der ist allerdings ziemlich, sagen wir mal, dünn gehalten. Man kann allerdings auch einfach einen OpenGL Kontext mit SFML erstellen. Der Hauptvorteil von dem ganzen, wenn überhaupt, ist allerdings eher die Platformunabhängigkeit. Wenn du nur für Windows programmierst, kannst du letztlich auch gleich die WinAPI nutzen, soo kompliziert ist das jetzt nicht.
Und was die etwas "fortgeschritteneren" Vorteile/Nachteile von SFML angeht: http://www.c-plusplus.net/forum/315694
-
cooky451 schrieb:
Wenn du nur für Windows programmierst, kannst du letztlich auch gleich die WinAPI nutzen, soo kompliziert ist das jetzt nicht.
Ist bei mir zwar schon was her, dass ich sowas gemacht habe, aber kann ich mich daran erinnern, dass das für mich damals tagelangen Brechreiz bedeutet hat, vorallem wenn man irgendwas ein Bischen anders haben wollte als im Tutorial. Na gut, ich hatte halt viel Zeit und war recht schmerzfrei, weswegen mich das nicht vom Weitermachen abgehalten hat. (Gut genug, das ganze wirklich zu verstehen und nen sauberen Wrapper zu schreiben, war ich damals aber auch nicht.) Ich würde das trotzdem keinem Programmier-Anfänger empfehlen. Aber na gut, ist vielleicht auch Geschmackssache. Ich gehöre auch zu den Warmduschern, die Anfängern eher sowas wie Python empfehlen würden als C++.
-
dagegen wuerde ich dann https://www.scirra.com/construct2 halten, das ist noch viel einfacher zu nutzen um spiele zu machen. also nur fuer den fall dass man es nicht unbedingt richtig mit c++ und einer graphik api lernen moechte.
-
Hübsch, kannte ich noch gar nicht. Das wär mir persönlich dann aber zu sehr das andere Extrem*.
*Ich stell mir gerade als sehr grobe Vereinfachung des Problems also ein kontinuerliches Spektrum zwischen komplex+flexibel und simpel+beschränkt vor.
-
wollte auch nur zeigen, dass 'einfach' manchmal uebers ziel hinwegfegt
-
Dobi schrieb:
Vorteil: einfach und komfortabel
Nachteil: nur 2D
Da man anfangs aber meistens eh nur 2D-Kram macht, sollte das kein Drama sein.Jup, mit bunten Quadraten wollte ich anfangen.
cooky451 schrieb:
Wenn du nur für Windows programmierst, kannst du letztlich auch gleich die WinAPI nutzen, soo kompliziert ist das jetzt nicht.
Ich kann es ja mal versuchen, nur sollte es für mich am Anfang weniger kompliziert sein.
rapso schrieb:
dagegen wuerde ich dann https://www.scirra.com/construct2 halten, das ist noch viel einfacher zu nutzen um spiele zu machen. also nur fuer den fall dass man es nicht unbedingt richtig mit c++ und einer graphik api lernen moechte.
Naja, ich möchte "am Ende" sauber c++11 programmieren können. Trotzdem werde ich es mir auch ansehen, wenn es wirklich "noch viel einfacher" ist.
Danke für eure Hilfe
-
Dobi schrieb:
dass das für mich damals tagelangen Brechreiz bedeutet hat
Hm na ja. Die WinAPI ist natürlich uralt und entsprechend hässlich, aber zumindest relativ streamlined und das msdn ist auch recht sauber. Für Spiele will man ja auch nicht wirklich was machen außer ein Fenster öffnen + Input verarbeiten. Sollte schon gehen.
-
cooky451 schrieb:
Für Spiele will man ja auch nicht wirklich was machen außer ein Fenster öffnen + Input verarbeiten. Sollte schon gehen.
Ja, aber dann kann man auch gleich SFML benutzen, hat einen Bruchteil des Codes und bleibt dann noch portabel. Falls man eines Tages dann doch die WinAPI braucht, kann man sie immer noch anschauen.
Positiv, wie viel C++ kannst du denn schon? Bücher, die dir gleichzeitig C++ und Spieleprogrammierung beibringen, gibts meiner Erfahrung nach wenig sinnvolle. Ich würde mich eher auf ein gutes C++-Buch konzentrieren, und das im Voraus (oder notfalls parallel dazu) lesen.
-
Oh, SFML kann einem auch einen DirectX Kontext geben? Wusste ich gar nicht.
-
cooky451 schrieb:
Oh, SFML kann einem auch einen DirectX Kontext geben? Wusste ich gar nicht.
DirectX war keine Anforderung, das hast du erwähnt. Der Threadersteller sprach lediglich von "Hobby-Nachwuchs-Spiele programmieren".
Positiv, vielleicht solltest du etwas genauer erwähnen, was du genau willst. Möchtest du einen schnellen Einstieg in die 2D-Spieleprogrammierung? Dann ist SFML sicher eine gute Wahl. Möchtest du lieber die zugrunde liegenden Techniken kennenlernen? Dann kannst du direkt mit OpenGL oder DirectX beginnen. Damit brauchst du um einiges länger, um an ähnliche Resultate zu kommen, dafür hast du vertiefte Kenntnisse über hardwarenahe Abläufe.
Am besten schaust du dir auch mal die SFML-Homepage an, damit du einen Eindruck über die Funktionalität bekommst. Wenn du einen Blick in die Tutorials wirfst, siehst du recht genau, wie einzelne Dinge realisiert werden.
-
Nexus schrieb:
Positiv, wie viel C++ kannst du denn schon?
Standard Dinge wie Syntax, Variablen, Schleifen, Funktionen usw.
Nexus schrieb:
Positiv, vielleicht solltest du etwas genauer erwähnen, was du genau willst.
Zu Anfang möchte ich 2D-Spiele programmieren. Angefangen mit sich drehenden Quadraten über Kopien von Spielen à la Doodle Jump und Space Invaders würde ich dann übergehen in eigene komplexere Abenteuer- und Strategiespiele. Anschließenden würde ich in die 3D-Welt mit einem Minecraft oder Slenderman Klon einsteigen - Soweit mein bisheriger Plan.
Nexus schrieb:
Möchtest du einen schnellen Einstieg in die 2D-Spieleprogrammierung? Dann ist SFML sicher eine gute Wahl. Möchtest du lieber die zugrunde liegenden Techniken kennenlernen? Dann kannst du direkt mit OpenGL oder DirectX beginnen. Damit brauchst du um einiges länger, um an ähnliche Resultate zu kommen, dafür hast du vertiefte Kenntnisse über hardwarenahe Abläufe.
Was genau wär der Vorteil von Kenntnissen über hardwarenahe Abläufe?
Danke für eure Hilfe
-
Positiv schrieb:
Standard Dinge wie Syntax, Variablen, Schleifen, Funktionen usw.
Okay, dann musst du definitiv noch mehr C++ lernen. Klassen, Polymorphie, Templates, STL, Zeiger und RAII sind z.B. sehr wichtige Themen.
Positiv schrieb:
Zu Anfang möchte ich 2D-Spiele programmieren. Angefangen mit sich drehenden Quadraten über Kopien von Spielen à la Doodle Jump und Space Invaders würde ich dann übergehen in eigene komplexere Abenteuer- und Strategiespiele. Anschließenden würde ich in die 3D-Welt mit einem Minecraft oder Slenderman Klon einsteigen - Soweit mein bisheriger Plan.
Okay, das klingt vernünftig. Ich würde dir raten, mit SFML 2 anzufangen, dann kommst du relativ schnell voran. Vernachlässige aber nicht Game-Architekturen oder C++ an sich, die verwendete Grafikbibliothek wird nur ein kleiner Teil in deinen Projekten sein.
Positiv schrieb:
Was genau wär der Vorteil von Kenntnissen über hardwarenahe Abläufe?
Es kommt halt wieder drauf an, was du genau machen willst. Generell hast du so natürlich mehr Möglichkeiten, spezifische Features einzubauen, besonders im 3D-Bereich. Die Frage ist, ob du das brauchst, denn Open-Source-Bibliotheken bieten üblicherweise schon recht viel fertig an. Auch sparst du mit ihnen ein Vielfaches an Zeit und Aufwand. Wir hatten kürzlich eine Diskussion darüber.
-
Nexus schrieb:
Positiv schrieb:
Standard Dinge wie Syntax, Variablen, Schleifen, Funktionen usw.
Okay, dann musst du definitiv noch mehr C++ lernen. Klassen, Polymorphie, Templates, STL, Zeiger und RAII sind z.B. sehr wichtige Themen.
Bis auf Polymorphie und RAII kann ich mit den Begriffen etwas anfangen.
Nexus schrieb:
Positiv schrieb:
Was genau wär der Vorteil von Kenntnissen über hardwarenahe Abläufe?
Es kommt halt wieder drauf an, was du genau machen willst. Generell hast du so natürlich mehr Möglichkeiten, spezifische Features einzubauen, besonders im 3D-Bereich. Die Frage ist, ob du das brauchst, denn Open-Source-Bibliotheken bieten üblicherweise schon recht viel fertig an. Auch sparst du mit ihnen ein Vielfaches an Zeit und Aufwand. Wir hatten kürzlich eine Diskussion darüber.
Das mit dem Zeit und Aufwand sparen ist natürlich am Anfang verlockend. Aber wenn ich dann weiter mache, dann möchte ich möglichst wenig fertig verpacktes benutzen. Ich bin es ja schließlich, der da programmiert und etwas mehr oder weniger einzigartiges schaffen möchte.
Danke für die Hilfe.
-
Positiv schrieb:
Bis auf Polymorphie und RAII kann ich mit den Begriffen etwas anfangen.
Du musst nicht nur die Begriffe kennen, sondern auch die Konzepte dahinter verstehen
Das ist nicht nur leeres Bla Bla, gerade bei C++ verbirgt sich hinter einem Sprachmittel oft mehr als man denkt. Spieleentwicklung ist an sich schon komplex genug, da sind gute Sprachkenntnisse von enormem Vorteil. Aber das nur am Rande...
Positiv schrieb:
Das mit dem Zeit und Aufwand sparen ist natürlich am Anfang verlockend. Aber wenn ich dann weiter mache, dann möchte ich möglichst wenig fertig verpacktes benutzen. Ich bin es ja schließlich, der da programmiert und etwas mehr oder weniger einzigartiges schaffen möchte.
Erstens wirst du niemals alles selbst programmieren können, du musst immer auf Bibliotheken von anderen zurückgreifen. Zweitens interessiert die Spieler das Resultat mehr als die zugrunde liegende Technologie -- solange letztere Faktoren wie Portabilität, Stabilität und Performance nicht negativ beeinflusst.
Daher ist die Frage eher, welche Features du benötigst, und wie viel du von der Flexibilität von Low-Level-APIs profitierst. Viel Konkreteres kann man dazu nicht sagen. Am besten schaust du zu gegebener Zeit nach, welche Möglichkeiten dir offen stehen, und wählst die am besten passende. Du kannst auch mehrere Ansätze ausprobieren, dann wirst du schon herausfinden, was dir am besten gefällt
-
Jo, und mit dem alles-selbst-machen ist das halt so eine Sache. Als ich noch klein war, fand ich das auch toll und uncool wenn man viel fertiges benutzt. Aber wo hörts dann auf, was ich nocht von anderen benutzen will? Grafik-Engine? Grafikkartentreiber? Betriebssystem? Bios? CPU/GPU? Transistoren selbst zusammenlöten? Rohstoffe dafür selbst im Berg abbauen?
Klar ist es super wenn man von möglichst viel Ahnung hat, aber man kann nicht alles bis ins letzte Details kennen und vorallem selbst machen, weil dafür das Leben zu kurz ist.
-
He Dobi, du bringst mich auf eine Idee.
Ist es möglich ein Hallo-Welt-Programm, was in C++ geschrieben wurde zu 100% zu verstehen? Also das man wirklich vom Doppelklick auf die Exe bis zur Bildschirmausgabe alle Code- und Signalpfade kennt und versteht.
Ich denke das kein Mensch alleine das schafft. Man könnte immer weiter ins Detail gehen und wirklich jeden kleinen Scheiß bis in die Atome betrachten. Die Fragen wie das denn nun GENAU geht, würden kein Ende nehmen.
-
Verstehen (wenn auch nicht unbedingt nachbauen) bis zur elektrischen Ebene kann ich mir schon vorstellen. Spätestens aber wenns in den Subatomaren Bereich geht, kommt man ja irgendwann an bisher generell nicht beantwortete Fragen. Und jenachdem wie penetrant du dann bist, kannst du eh immer nen infiniten "Warum?-"Regress fahren, bis du wieder bei "Keine Ahnung." angekommen bist. Klar, dann kannst du sagen, dass irgendein Einhorn-reitender Gott das gemacht hat, aber das löst das Problem ja auch nicht, weil man dann wieder fragen kann, wo der denn herkommt usw.