Hallo Delphianer,
Ich habe mir mal in der Letzen woche einiges mal durch den Kopf gehen lassen. Schwerpunkt dabei war halt die Programmierung von 2D Spielen, bzw. die sinnvollste Umsetzung davon.
Also Ich möchte jetzt erstmal einige Dinge anhand einiges Konkreten Beispieles fassen ich hoffe dass das kein Problem ist mit der Topicwirtschaft, da man ja eigentlich nur eine Frage pro Topic stellen soll, aber ich finde, dass man das sehr wohl zu Grundlagen zusammenfassen könnte.
Erst einmal die Grundidee, ein 2D Spiel der einfachsten Art: Pokemon. Klingt vielleicht ein wenig komisch oder gar lächerlich für den ein oder anderen, aber als RPG hat das Spiel eingeschlagen wie eine Bombe. Und es ist, finde ich, heute noch einies der Besten RPG's für den Gameboy!
Also Da ich jetzt nicht über das Spiel an sich Diskutieren will, sondern einiges über die allgemeine Porgrammierung nun zunächst meine "Ideen" wie man so etwas realisieren könnte.
Als Referenz nehme ich jetzt einfach mal die Andorra 2D Engine
Also als Grundstruktur würde ich ein Gitter wählen, sagen wir 32x32. So würden wir dann unsere Level aufbauen, mit kleinen Tiles die jeweils 32x32 Pixel groß sind. In der Programmierung hab ich mir dafür halt 2 Varianten überlegt.
1) Man nimmt ein "Image" und zeichnet darauf halt jeweils die Tiles und bewegt dan ndas Komplette bild wenn der Character bewegt wird (Der Character ist ja immer in der Mitte)
2) Man nimmt ganz viele kleine Images (Sprites) und bewegt jedes einzeln
Meine Frage hierzu, welche von den beiden Methoden wäre denn "besser" ?
Ich meine mal irgendwo etwas gelesen zu haben wie "Ein Großes bild zu bewegen ist schwieriger als viele kleine", aber ich bin mir nicht mehr sicher ob ich mich da verlesen habe.
Dann weiter zur Struktur:
Das ganze wird ja ein Gitter, und da haette ich mir überlegt ob es da nicht sinnvoll wäre die jeweiligen Tiles irgendwo in einer "doppelten Array" zu halten. also im prinzip eine Array die man so anspricht: Array[x,y]. Würde für mich jetzt das beste Prinzip sein ein Solches Spiel in Coordinaten in solch ein Gitter unter zu ordnen.
Meien Frage hierzu wäre, ob ich damit richtig liege, oder ob es da ne besser Methode gibt?
So dann gehen wir mal weiter...
In dem Spiel Pokemon gibt es ja 2 Grundlegende ich nenn' sie jetzt mal "States" (Keine Ahnung was die Mehrzahl von Status auf deutsch ist und zu faul grad nachzuschauen sonst komm ich vom Thema ab). So diese States sind zu einem die Normale bewegung in der Welt und zum anderen Kämpfe. Nun war meine Überlegung wie man solche States umsetzt, da man ja im prinzip nur eine Oberfläche für die Ausgabe verwenden möchte (sollte?).
Also hatte ich da gedacht in der Main Funktion, die für das "Zeichnen" zuständig ist, einfach die Befehle in weiter Prozeduren einzuteilen & diese je nach State abzurufen.
Hierzu wieder meine Frage, ist das wirklich Sinnvoll oder gibt es da auch ne bessere Variante?
Zum Schluss soll das ja eventuell sogar ein Onlinfähiges Spiel werden, aber das möchte ich jetzt hier nicht weiter behandeln, da hab ich schon angefangen Narses TCP/IP Tutorials zu studieren und bis jetzt bin ich auch recht weit gekommen.
So ich hoffe das war's erstmal zu den Wesentlichen grundlagen, ich denke wie man andere Charactere einbidet und bewegt, das kann man von der eigenen Figur ableiten. Ich wollte auch nicht die 100%ige Umsetzung erfragen sondern nur ob die Ansätze "gut" sind und wie man solche Probleme Sinnvoll löst.
PS EIN ZUSATZ:
Das Gitter hatte ich gewählt um die Kollisionen besser zu erfassen, sprich also wenn der Char nun auf Position X/Y ist, und die Pfeiltaste-Oben drückt, kann ich eben schnell schauen aws auf dem feld X/Y-1 liegt und dem entsprechend handeln.
Moderiert von
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Crosspost