SDL,Qt,SFML oder was komplett anderes - was eignet sich für mich am besten?
-
Hallo zusammen
Kurz zu mir:
Ich interessiere mich seit einiger Zeit fürs Programmieren. Hierfür habe ich Anfang 2018 das Buch "C: Programmieren von Anfang an" von Helmut Erlenkötter durchgelesen und natürlich fleißig die Übungen gemacht.Leider war mir das Thema und C als Einstieg viel zu schwer, weshalb das ganze dann erstmal eingeschlafen ist. Anfang Oktober hat es mich dann wieder gerissen und ich habe einen 20h Kurs auf Udemy zum Thema c++ gemacht. Das hat schon richtig viel gebracht und jetzt habe ich "Blut geleckt"
Ich habe mich nun ein wenig über sfml, QT, und SDL informiert da ich in Richtung Spiele Programmierung gehen will, rein hobbymäßig natürlich. In SDL habe ich mich nun ein paar Tage eingearbeitet um mal einen Einblick/Überblick der Materie zu bekommen. Ich bin begeistert
Was ich will:
Ich möchte meine Lernphase gerne Richtung Strategie/Aufbau-Spiel ausrichten und bin mir unsicher in welche Bibliothek ich mich da einarbeiten soll. SDL ist mir sehr sympathisch aber in Beispielwerken finden sich eigentlich nur Jump&Run Spiele. Mit meinen momentanen Wissensstand würde ich aber sagen das es keine Rolle spielt ob Jump&Run, Action oder sonst was....
Allerdings kann ich das als blutiger Anfänger vermutlich nicht weitreichend überblicken.Nun zu meiner Frage:
Welche Bibliothek würde sich für meine Richtung am besten eignen? Ist ja doch mit viel Zeit verbunden und wäre dann schade wenn ich in einem Jahr feststelle das ne andere Bibliothek viel besser geeignet wäre.Ps.: Mir kommt es nicht darauf an schnell Ergebnisse zu erzielen, viel wichtiger ist mir die Dokumentation und eine gewisse Flexibilität beim Coden. Daher sehe ich von einer fertigen Engine eher ab. Der Weg ist das Ziel
Danke für eure Zeit&Hilfe und schon mal einen guten Rutsch ins neue Jahr
-
prison architect wurde auch mit sdl erstellt, und das ist doch ein aufbauspiel, oder?
also probiers ruhig damit.
-
@ronun sagte in SDL,Qt,SFML oder was komplett anderes - was eignet sich für mich am besten?:
Ist ja doch mit viel Zeit verbunden und wäre dann schade wenn ich in einem Jahr feststelle das ne andere Bibliothek viel besser geeignet wäre.
DAS wird vermutlich keine Rolle spielen Ich hab vor bald 20 Jahren angefangen zu programmieren und hatte auch solche Überlegungen angestellt. Nichts davon hat im Nachhinein irgendeine Rolle gespielt. Wichtig war nur, dass ich gelernt habe, zu programmieren.
-
Ok cool. Danke euch beiden für die Antworten. Dann tauch ich mal tiefer in die Materie von SDL ein
-
Sdl ist denke ich eine gute Wahl. Habe ich schon öfters gesehen in Spielen. Zum Beispiel SuperTuxKart hatte immer sdl verwendet. Sind aber irgendwann auch auf eine engine ungestiegen.
sfml habe ich nur mal angetest mit einem relativ simplen 2D Spiel. Das ging ganz gut, mehr kann ich dazu aber nicht sagen.
Qt eignet sich meiner Meinung nach erstmal so pur nicht wirklich für Spiele. Das ist nicht der Fokus und die Dokumentation ist entsprechend nicht sehr umfangreich. Nur für qml (die scriptsprache von qt) gibt es Beispiele für 2D Spiele (wie man sie von handy kennt ... candy crush oder sowas). Qml ist generell wohl die Zukunft von Qt, ich finde es auch schön zum verwenden so grundsätzlich und es ist sehr gut kompatibel mit einem C++ backend bzw. mit eigenen C++ Klasen. Ich programmiere allerdings lieber in reinem C++ und nicht so deklarativ, also Geschmackssache. Darauf aufbauend gibt es die VPlay-Engine. Diese stellt eine Erweiterung zu Qml da und es gibt vor allem viele Tutorials im 2D Bereich (Flappy Bird, Uno als Handyspiel, Tower defense, Super mario artig inklusive level builder usw.). Der 3D Bereich ist noch nicht so stark vetreten. Es wird allerdings daran entwickelt.
Qt würde ich also von den widgets abraten und zu qml greifen bzw. der VPlay-Engine.Generell sei vlt noch gesagt, dass ich mich nicht zu früh auf Graphik stürzen würde. Erstmal die Grundlagen richtig lernen. Ich gehe stark davon aus, dass ein Udemy 20h Kurs dafür nicht ausreichend ist. Letzendes musst du das aber selbst wissen.
-
@Leon0402 sagte in SDL,Qt,SFML oder was komplett anderes - was eignet sich für mich am besten?:
Auch dir herzlichen Dank für deine Antwort und natürlich ein gesundes neues Jahr
Ich würde gerne nochmal auf deinen letzten Absatz eingehen. Ich habe mir das jetzt so vorgestellt das ich mich in die Bibliothek erstmal einarbeite, evtl eine eigene Dokumentation erstelle. Quellen habe ich genug gefunden. Danach fange ich an eigene kleine Konzepte zu verfolgen und mich dann modular weiterentwickle.
Nach deiner Aussage habe ich nachgedacht. Prinzipiell kann ich ja Grundsätzliches bereits nur mit c++ machen und als Eingabe/Ausgabe dann eben per Texte statt Mausklick arbeiten, die Grafik dann nachträglich einbinden. Andererseits denke ich mir aber auch warum nicht gleich beides gemeinsam lernen, wäre sdl in c++ integriert würde man es ja auch gleich mit lernen
Wie hat sich denn deine (die Frage richte ich auch gerne an alle mitlesende) Einarbeitungszeit aufgeteilt und gestaltet? Vllt kann ich mir da ne Scheibe abschneiden.
-
@ronun sagte in SDL,Qt,SFML oder was komplett anderes - was eignet sich für mich am besten?:
Ok cool. Danke euch beiden für die Antworten. Dann tauch ich mal tiefer in die Materie von SDL ein
Vielleicht würde ich dann aber auch den Reinheitsgrad deiner Sprache achten wenn du C++ verwendest solltest du dir mir RAII ansehen falls du das nicht kennst. Die SFML ist da direkt c++iger.
-
Beides gleichzeitig lernen ist etwas schwierig. Zumindestens wenn man sich noch sehr am Anfang befindet. Dafür gibt es wohl verschiedene Gründe. Ein erster Grund wäre zum Beispiel der von @forbidden erwähnte "Reinheitsgrad". Wie dir vlt. bewusst ist, ist sdl nicht mal in C++ geschrieben. Da ich sdl selber noch nie verwendet habe, möchte ich da jetzt nicht zu sehr spekulieren. Aber ich behaupte mal, dass die Library zwar 100% benutzbar in C++ ist, aber anders verwendet wird als du eine C++ Library verwenden würdest. Außerdem verwendest du auch direkt die Methoden von der Library. Hier ist vlt. Qt ein gutes Beispiel. Die kommen dann nicht nur mit Graphik spezifischen Sachen, sondern bringen auch gleich eigene Klassen für Strings, Vektoren usw. mit. Letzendes muss man auch immer gucken, ob man sich nicht mit seinen Zielen übernimmt. Wenn direkt Graphik hinzukommt, hast du natürlich neue Probleme, die auftreten können. Auf die fokussierst du dich dann mit dem Ziel "Hauptsache es funktioniert" ... und lässt vlt. grundlegende Designregeln komplett außer Acht ... ein typisches Beispiel wäre vlt. anzufangen Objekte global zu machen. Bei Spielen kann das schon sehr verlockend sein, zumal du sowas auch öfters in Tutorials findest. Vielleicht ist das ja tatsächlich auch Standard (hier möchte ich mal nicht zu weit aus dem Fenster lehnen), aber grundsätzlich gilt sowas zu vermeiden. Und wenn man auf ein Thema stößt, was man nicht so kann ... nehmen wir mal Templates als Beispiel ... das man für sein Projekt benötigt. Dann wirst du wohl kaum dich einen Monat lang mit Templates beschäftigen (auch wenn das Thema sicherlich genug Potential hat dich ein ganzs Jahr lang zu beschäftigen), da du ja dein urpsrüngliches Projekt nicht aus den Augen verlieren willst. Du guckst dir also irgendein einseitigen Artikel an und probierst solange herum bis es funktioniert ... hast aber am Ende eig immer noch keine Ahnung von Templates.
Das wären jetzt mal so Sachen die mir spontan einfallen würden. Andere sehen das vlt. anders und muss ja auch nicht auf jeden zutreffen. Darüber hinaus manchmal ist es auch besser es so zu probieren, anstatt dass die Motivation zu Programmieren direkt verloren geht, weil man immer nur konsolenbasierte Programme schreibt. Was Spiele angeht, ist das halt nicht unbedingt super spaßig.Faustregel ist aber eigentlich sowieso, dass Graphik von Logik getrennt sein sollte. So habe ich das zumindest mal gelernt für Applikationen. Sprich, am Ende hat man ein Program bei dem die Oberfläche (ohne den ganzen Code umzuschmeißen) einfach austauschbar ist. Bei Qt nicht grade leicht, da es ja mehr als nur Graphik bietet. Inwiefern das jetzt auf Spiele zutrifft weiß ich nicht ... Entkoppelung ist aber immer eine ganz gute Sache, so weit es eben geht. So wie du eben gesagt hast ... erstmal nur textausgaben, graphik später.
Ich habe vor ungefär 1,5 Jahren mit C++ angefangen, wobei ich aber vorher schon mit Java zu tun hatte - rein hobbymäßig, gehe noch zur Schule. Ich hatte mir damals den C++ Programmier zugelegt und auch in der Regel täglich mehrere Stunden programmiert damit. Dementsprechend habe ich auch ganz gut Fortschritte erzielt. Als Schüler hat man aber vermutlich mehr Zeit und meine Ambition ist auch beruflich in die Informatik zu gehen, daher ist das jetzt mit Sicherheit nicht der richtige Plan für jeden. Es gibt zum Beispiel eine kleine Ausgabe von dem C++ Programmier (C++ eine Einführung von ulrich Breymann). Das wäre vlt. ein geignetes Buch, da es im Gegensatz zum großen Bruder nicht 1000 Seiten hat, sondern nur 362. Darüber hinaus wird eben auch Graphik (in dem Buch sfml, im Größeren Qt) behandelt und das nicht erst auf der letzten Seite. Ich glaube nach den Grundlagen (Kontrollstrukturen) hat man mit einem TicTacToe begonnen. Das wurde erstmal textbasiert umgesetzt und objektorientierung wurde daran erklärt. Danach kam Graphik hinzu. Später noch ein Spiel, wo man eine Szene hat mit einer Kuh auf ner Wiese und einem Vogel der von links nach rechts immer reinfliegt. Mit enter oder so hat der Vogel gekackt und man musste die Kuh treffen. Ich finde es einen gelungenen Einstieg in C++. Hier weiß ich allerdings nicht inwieweit der udemy kurs die Grundlagen schon behandelt hat bzw. wie fit du bist.
Ich persönlich hatte das erstmal mit Graphik zu tun als das Kapitel in dem großem Buch dran kam. Kapitel 16, Seite 5xx oder so, da war ich dann schon relativ fit mit den Grundlagen. Das war wie gesagt qt und seitdem habe ich auch mehr mit qt experiementiert. Allerdings nicht ausschließlich, nur hin und wieder für kleinere Projekte. Hauptsächlich beschäftige ich mich immer noch mit erweiterten Grundlagen (aktuell detailliert Templates).
Insgesamt rate ich dir einfach mal Versuche mit sdl zu starten und zu gucken wie gut das läuft. Wenn du merkst, dass du zu viele Probleme mit C++ allgemein noch hast oder irgendwie dein Code immer schlechter wird, design Probleme ohne Ende, dann geh nochmal weg davon. Hauptsache man hat Spaß dabei
-
@Leon0402 sagte in SDL,Qt,SFML oder was komplett anderes - was eignet sich für mich am besten?:
Wow erstmal danke für deine sehr umfangreiche Antwort. Finde ich Klasse!
Also im großen und ganzen habe ich es so gemacht wie du im letzten Abschnitt geraten hast: einfach mal rum probiert. Wollte mir das Spiel Snake in der Konsole Programmieren, so als Test ob ich es auch wirklich verstanden habe bevor ich mich an SDL richtig ranwage. Bin dann aber recht schnell ins stocken geraten und habe dann selber bemerkt das ich die Grundlagen erst festigen muss bevor ich an die Grafik gehe. War doch recht auffällig, alles irgendwie mal gehört aber die Syntax kann ich nicht wiedergeben und hier und da existieren Verständnis Lücken bei fundamentalen Kenntnissen.
Ich mein im Grunde genommen ist SDL doch nur eine Bibliothek dessen Funktionen man sich ansehen muss. Und um die richtig verstehen zu können müssen nun mal die Basics sitzen.
War dann einfach irgendwann überfordert und wusste nicht so recht wo ich ansetzen sollte.
Ich habe nun angefangen mir meine eigene C++ Anleitung/Mitschrift zu schreiben. Einfach alle Infos geordnet und nach eigenem System in einem Dokument das ich im laufe der Zeit immer erweitern kann. Außerdem eigene Codebeispiele in einer großen Projektmappe.
Dadurch lerne ich persönlich am besten und spaß macht mir das erstellen ohnehin
Zur Zeit gehe ich nochmal den Videokurs durch und schreibe mit, erstelle zu jeder Lektion Codebeispiele und führe es mit der Anleitung zusammen...
Danach möchte ich mich noch auf einen anderen C++ Kurs stürzen der ein paar andere Dinge beleuchtet. Joa und dann schauen wir weiter. Dran bleiben und üben würd ich sagen.Das eine Buch von Ulrich Breymann mit knapp 1000 Seiten habe ich mir auch schon ins Auge gefasst. Allerdings will ich mir erst noch ein paar andere Sachen ansehen...
Und am Ende lande ich vllt. doch bei SFML da dies in C++ geschrieben ist.
Aber das kann ich noch für einige Zeit zurück stecken. Der Weg ist das Ziel
-
Ich kann dir SFML empfehlen, falls du mal graphik brauchst, aber wenn du simulationen programmieren lernen willst, kannst du ganz trivial ein textfenster nutzen. Was du nutzt ist an sich egal, weil du ja keine Erfahrung hast und somit viele Fehler machen wirst und mit ein bisschen angesammelten Wissen alles "nochmal, aber richtig" machen wollen wirst. Das ist ganz normal. Deswegen mach dir keine Sorge womit du anfaengst, du wirst nicht in einer Falle sein. Nimm also das, was fuer dich am schnellsten/einfachsten wirkt und fokusiere dich auf das erlernen von simulationsalgorithmen etc.
Zum lernen von simulationen, empfehle ich dir diese kleinen Schritte:
-
https://de.wikipedia.org/wiki/Conways_Spiel_des_Lebens (das braucht keinen input, aber du koenntest es um input erweitern)
eine einfache Simulation die zeigt, wie simple dinge beim zusammenspiel im grossen doch sehr faszinierend sein koennen. -
https://www.youtube.com/watch?v=c5rfPGG4Jfk
"prey preditor" manchmal auch fish/shark usw. simulierst zwei typen von kreaturen (und manchmal Nahrung fuer Prey), der Predator frist die Prey und vermehrt sich, falls er nicht essen kann, stirbt er wiederrum. Prey vermehrt sich auch und futtert ihre nahrung.
du kannst das auf mehr und mehr rassen ausweiten. z.B. https://github.com/ShprAlex/SproutLife -
https://en.wikipedia.org/wiki/Boids (boid simulation, floaking, swarm intelligence).
hier kannst du gruppen interaktion lernen, und natuerlich auch interaktion unter gruppen (z.b. fische+haie) -
ant game, z.B. koenntest du dich an sowas wagen: http://ants.aichallenge.org/
-
jetzt koenntest du ein mini-siedler anfangen. du weisst aus 1. +2. wie man simuliert, aus 3. wie wesen interagieren, aus 4. wie inteligente aktoren ihren tasks nachgehen.
-
jetzt ausreichende graphik programmierung lernen.
-
???
-
profit
-
-
@rapso
Ah ok, das ist ja ein ganz neuer Ansatz. Das sehe ich mir mal genauer an.
Danke für die Info!