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.
Registriert: Fr Mai 29, 2009 19:44 Beiträge: 12 Wohnort: Saarland
Ein Spiel mit der TImage Komponente zu programmieren?! Damit hab ich persönnlich nur schlechte Erfahrung. Wenn das Spiel etwas koplexer wird, fängt das ganze an in die Knie zu gehen, weil die PC-Power zu schwach ist. Kann natürlich auch daran liegen das ich irgend was wichtiges vergessen habe, was die Leistung verbessert.
Aber wie gesagt, villeicht geht das ganze auch mit der TImage Komponente, ohne das man einen Ultra-High-End PC braucht. Die Methode würde mich dann allerdings auch interessieren, will immer was dazu lernen
Also ich würde schon gern Andorra benutzen, ist ja im prinzip nur eine Engine die auf OpenGL auch zugreifen kann .
Mein Problem ist eher, dass ich nicht weiß wie ich die welt an sich am besten umsetzen soll, ich meine, dass ich dort spielfiguren und ähnliches laufen lasse
das ist glaube ich das geringste Problem.
Ich würde halt gerne so ein 2D Spiel basieren auf Tilesets machen, nur weiß ich nicht wie ich dann das darstellen soll,
wie gesagt jedes Tile einzeln als Sprite oder ähnliches was ich dann verschieben kann ist ein wenig blöd weil schon bei 64x64 felder a 32x32 pixel
über 4k einzelteile wären und dann noch verschiedene Layer würde den Ramen des möglichen glaube ich sprengen.
und Wenn ich nun alles Zeichne als Ganzes und dann verschiebe ist das hoher speicherverbrauch glaube ich.
Also ich suche halt nur nach einem weg dies umzusetzen
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Jedes Tile ist ein Quad mit einer Textur. Und wenn du die Animieren wilslt, dann verschiebstu du die Texturauf dem Quad. Das wird auch bei uns in Tutorials beschrieben.
Um dir effektiv eine Vorstellung machen zu können was du wie umsetzen kannst, solltest du dir erstmal die Technologie reinziehen die zur Verfügung steht. Danach hast du erstmal ein Gefühl dafür was geht.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Naja, also wenn du auf Andorra aufsetzen willst, solltest du in einem Forum nachfragen, wo sich mehr leute rumtreiben, die sich damit (gut) auskennen. Ich weiss nicht, wieviele von uns hier damit schon gearbeitet haben, aber der Entwickler ist hier ja auch manchmal unterwegs (oder?).
Wenn dus aber selbst machen willst, dann liest du dir am besten die Tutorials hier im Wiki durch. Wobei das von grund auf selber machen für einen Anfänger (gerade mit dem kommenden GL3) nicht unbedingt ratsam ist. Wenn du noch nicht so gut drin bist im Denken bezüglich Datenstrukturen und Verwaltung, ist es denke ich besser, wenn du dich erstmal darauf konzentrieren kannst und die letzendliche Darstellung von einer (leistungsfähigen) Engine erledigen lässt.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
zum thema tilebased games gibt es auf gamedev klasse tutorials zum verständnis für solche "Baukästen".
soo.. als erstes sollte man sich wohl ein Object entwerfen, das ein Tileset verwaltet. Also eine Textur lädt und ein Array mit möglichen Tiles enthält. Als nächstes braucht man ein Tile Object, dass Koordinaten auf der Tileset-Textur kennt und alle Eigenschaften, die das Tile haben soll. bestimmte Eigenschaften können zum Beispiel sein, aus welcher Richtung man auf ein Tile drauf gehen darf und in welche Richtung man es verlassen darf, oder ob an einer bestimmten Kante eine andere Bewegungsform gesetzt wird. wie ein Sprung oder Schwimmen/Fliegen. Das Tileset liefert dann über einen Index einen Pointer auf so ein Tile zurück und deine Map ist dann tatsächlich nur ein 2d-Array (x,y) das Pointer auf die Tiles beinhaltet. Was man dann noch schreiben muss ist ein Tileset-Editor, ein Map-Editor und evtl. noch eine Editor für NPC/Gegner. Man ist im Endeffekt also mit mindestens 2 Programmen unterwegs, es sei denn du denkst dir für das Spiel extra noch eine gigantische scriptsprache aus die mehr Entwicklungszeit braucht als das eigentliche Projekt, wie es hier im Forum momentan Trend ist.
du musst in dem Beispiel mit den Pointern nicht unbedingt Pointer benutzen, da ein beliebiger Pointer genauso groß ist wie ein Integer, der das Array auch direkt Indiziert. Wie man das ganze mit Andorra angeht weiß ich nicht, da ich Andorra noch nicht benutzt habe. Falls eure wahl noch nicht endgültig ist, kann man sich auch mal überlegen ob man direkt mit OpenGl die Zeichenroutinen etc. komplett selbst entwirft. Das kannn bei so einem Spiel sogar arbeit ersparen und performance gewinnen.
Ich hab irgendwo auf meiner Festplatte noch ein Programm das solche Tilesets erstellen kann. Ich schau mal ob ich es finde und lade den Code dann mal hoch.
Edit1: Eine Frage zum Schluß noch: Solle es ein 1:1 Gameboy Clone werden, oder wollt ihr nur das Spielprinzip nehmen und etwas "aufmotzen"?
_________________ Klar Soweit?
Zuletzt geändert von Sellmann am So Jun 07, 2009 14:19, insgesamt 1-mal geändert.
Das Spielprinzip soll übernommen werden nicht unbedingt das Game
Nur viel mir da nur Pokemon als Beispiel ein (mittlerweile alle games aus der RPG maker serie ...)
Also bei Andorra ist das so, dass es eine ImageList gibt, in der ich ein Tileset einlesen kann, dort kann ich die Pattern größe bestimmen
und dann hab ich alle tiles als index in dieser liste.
Mir fehlt halt nur noch wie man sowas zeichnen sollte..
Andorra2D Bietet Canvas ähnliche Zeichenroutinen über die man auch bilder zeichnen kann auf x,y koordinaten
Ich hab mir überlegt wenn man das übernhemen würde und ne array daraus macht müsste es funktionieren
allerdings wenn ich mich nicht täusche sind das bildschirm koordinaten, also müsstei ch dann das ganze wieder verschieben und neu "0" setzen
je nachdem wo ich mich gerade befinde um das wieder neu zeichnen zu lassen
und ich weiß nicht wenn ich eine welt zeichne die bsp. 4096 pixel breit ist, ob das nicht unsinnig wäre
als wie wen ich eine Zeichenroutine schreibe, die nur das was sichtbar ist und ein feld drum rum zeichnet, allerdings fehlt mir gerade noch
die vorstellung der umsetzung ...
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.