Auch ich habe es nun geschafft endlich mal ein richtiges Spiel zu entwickeln. Mit Grafik , Ton und was halt ein richtiges Spiel hat.
Herzlichen Glückwünsch
Für das
erste richtige Spiel ist das schon recht gut gelungen
Allerdings gibt es da natürlich noch sehr viele Sachen, die du in
späteren Versionen unbedingt verbessern solltest. Einige davon hast du ja schon unten aufgezählt. Ich zähle dir jetzt nochmal ein paar andere Sachen auf, die ich sehr wichtig finde.
Ich gehe dabei davon aus, dass es auch wirklich dein erstes richtiges Spiel ist und du noch recht wenig Erfahrung hast. Sollte ich da jedoch irgendwie falsch liegen, entschuldige bitte meine langen Texte die ich dir jetzt vorlege.
1. Musik
Du spielst eine einzige WAV Datei für die Schüsse ab. Das ist ja auch ganz in Ordnung. Aber ein wenig Musik wäre noch ganz nett.
Wenn du schon SDL_mixer verwendest, kannst du damit auch ein MIDI oder MP3 als Hintergrundmusik abspielen.
Was ich dabei wichtig finde ist das man Sound/Musik nicht nur abschalten, sondern auch die Lautstärke regeln kann. Und wichtig finde ich auch, dass die ganzen Einstellungen in einem späteren Optionsmenü auch dauerhaft gespeichert werden. Damit man bei jedem Spielstart nicht alles neu festlegen muss. Sobald du es geschafft hast einen Highscore zu speichern, dürfte das speichern von Optionen auch kein Problem sein.
2. Textausgaben
SDL_ttf ist nicht sehr schnell, sofern man sich kein passendes Cache-System anlegt. Wenn du also dabei bleibst solltest du es
beim zeichnen von Texten nicht übertreiben.
3. Systemanforderungen
Graka: 10MB.... empfholen 14 MB
Der Grafikspeicher wird sogesehen garnicht genutzt, auch wenn du
in SDL die HW_XXX flags verwendet hast. Dazu muss du erst die
SDL Umgebung entsprechend anpassen. Was aber für ein so kleines
Spiel unnötig ist.
4. Tearing
Dein Spiel hat sehr üble Tearing-Effekte bei mir. Wenn du noch nie etwas von Tearing gehört hast: http://de.wikipedia.org/wiki/Tearing
Um das ganze zu beheben, könntest du beispielsweise DirectDraw ansprechen und die Funktion
WaitForVerticalBlank einmal pro Frame aufrufen.
SDL_Flip verwendet nur dann VSync, wenn die SDL Umgebung entsprechend angepasst wurde. Verwende zudem eine fixe
Framerate (60 FPS), statt die Zeit des letzten Frames für alle Bewegungen mit einzurechnen.
Wenn du das
später alles verbesserst, erhält dein Spiel in der
Regel ein sogenanntes "Smoothing", also sehr weiche Bewegungen.
5. Bildschirmübergänge
Wenn man z.B. "Spiel starten" wählt ist man mit einem ruckt sofort im Spiel.
Schöner wäre es, den Bildschirmübergang von der einen Szene zur anderen etwas weicher zu gestalten. Beispielsweise könntest
du die alte Szene langsam ganz dunkel werden lassen und dann
die neue Szene langsam aus der Dunkelheit entstehen lassen.
Das kannst du z.B. sehr leicht über Alphablending realisieren. Es gibt auch
noch komplexere Verfahren einen Bildschirmübergang zu realisieren. (Alphamasken, Mosaic, etc.)
Viele Spiele verwenden für verschiedene Szenewechsel verschiedene Übergänge, um dem Spieler mehr Abwechslung zu bieten. Natürlich ändert
das ganze nichts am Spiel selbst, es wird dadurch nicht spannender. Es ist eher ein letzter Feinschliff.
6. Features
Um das Spiel spannender zu gestalten, solltest du versuchen noch
ein paar Extras einzubauen. Mehr Waffen ist schon eine sehr gute Idee. Evtl. auch verschiedene Raumschiffe, zwischen denen die Spieler wählen können.
Da gibts viele Möglichkeiten die selbst ein so kleines Spiel sehr ansprechend gestalten können. Allerdings solltest du es auch nicht zu groß machen, irgendwann muss das Spiel dann auch mal
fertig sein.
7. Bugs
Manchmal hat Spieler 1/2 sofort gewonnen. Wenn ich mit dem unteren Raumschiff einige Schüsse abfeuere und danach mit dem oberen und dann wieder das untere oder obere bewege, dann hat einer der Spieler sofort gewonnen und ich bin im Hauptmenü. Wenn ich dann wieder ein
neues Spiel starte, dann fliegen die Laser noch an den alten Positionen weiter, wo sie zuletzt(Beim letzten Sieg des Spielers) aufgehört haben.
Und wenn ich dann einfach nur eines der Schiffe nach links bewege, dann hat einer der Spieler sofort gewonnen.
Es kommt darauf an, welches Schiff ich bewege. Bewege ich das untere gewinnt sofort Spieler 2. Bewege ich das obere gewinnt
sofort Spieler 1. Und zwar immer mit 1250 Punkten.
Wie du das alles am besten verbesserst? Nun, mittlerweile muss ich bestimmten Community-Mitgliedern hier zustimmen. Verwende am
besten SFML statt SDL, das hat wesentlich bessere und schnellere Systeme. Es wird für dich auch viel einfacher zu bedienen sein als SDL. Damit wirst du schneller ans Ziel kommen.
SDL ist nur dann ein nützliches Werkzeug, wenn man einiges an Erfahrung hat. Diese Erfahrung zu erhalten dauert aber sehr lange.
Auch wenn ich oft sage, man sollte sich lieber ein komplett eigenes System schreiben, muss ich hier sagen, dass du mit SFML wesentlich
schneller ans Ziel kommen wirst. Es sei denn, du interessierst dich für die ganze Technik dahinter.
Aber aufjedenfall verbessern. Ich freue mich auf weitere Versionen von dir
Mit freundlichen Grüßen
Kasenoru