Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

05.01.2021, 19:47

Methoden um 2D World-Building ohne Engine zu vereinfachen, mit Collision-Detection

Moin!

Ich habe vor ein 2D Game in C++ zu schreiben. Vermutlich ein Top-Down Dungeon Crawler o.ä. Dazu werde ich C++ mit einem Framework (wahrscheinlich Raylib oder Oxygen) nutzen. Ich habe mir jedoch die Frage gestellt, wie man ohne Engine und somit ohne (GUI-)Worldbuilder ein Level erstellen soll, ohne alles von Hand einzutragen. Dass man bspw. ein Bild mit dem kompletten Level drauf ins Spiel läd, wäre eine Möglichkeit, jedoch stellt sich mir hier die Frage, wie man bspw. Wände (oder allgemein Objekte mit Collision) handhaben soll. Klar kann man alles von Hand Hardcoden, aber irgendwie kann ich mir nicht vorstellen, dass das die einzige und beste Methode ist.
Kennt ihr andere Methoden? ^^

Danke!

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

05.01.2021, 20:14

Folgende Optionen fallen mir ein:

1. Eigenen vereinfachten Editor bauen
2. Eine bestehende Engine "missbrauchen" und mit Editorscripten deine Levels erstellen. Mit Unity habe ich das schon mal gemacht, das geht gut.
3. Einen Editor wie bspw. Tiled Map Editor verwenden und die Daten, die dort herauskommen, programmatisch nacharbeiten. Das liefert allerdings nur gute Ergebnisse, wenn der Editor ungefähr zu deinem Spiel passt.
4. Manuell. Eigentlich klappt das auch für einfachere Levels ganz gut, je nachdem wie aufwändig alles ist.

3

05.01.2021, 20:19

1. Bisher habe ich nur ein kleines, sehr einfaches Programm gebaut, welches sehr spezifisch war und nur für eine Sache geholfen hat. Daher wird das eher schwierig.

2. Wie genau meinst du das? Habe bisher noch mit keinen Engines gearbeitet^^

3. Was meinst du mit "programmatisch nacharbeiten"?

4. Das ist der Fall den ich eigentlich vermeiden möchte, das wäre einiges an Arbeit ^^

Danke schonmal!

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

4

05.01.2021, 21:35

2: Unity erlaubt die grafisch mit Objekten eine Welt "zusammenbauen". Da das aber nur dazu dient, das level zu erstellen könnte man sagen bspw. alle Objekte mit einen Würfel sind Steine, alle Objekte mit einer Kugel sind Münzen. Dieses Objektmodell kannst du über ein Script, welches im Editor läuft auslesen, nach diesen Objekten suchen und dann in eine Datei die Informationen (position bspw.) speichern.
3: Ähnlich wie 2. Du speicherst in deinem Editor dein erstelltes Level. Bei Tiled ist das dann eine XML-Datei, die man einlesen kann. Dann kannst du dir einfach etwas überlegen, was du als was "interpretierst". Unterschied zu zweitens ist nur, dass du eine Datei an statt ein im Editor laufendes Script hast.

Jonathan

Community-Fossil

  • Private Nachricht senden

5

05.01.2021, 22:51

Naja, es hängt halt stark davon ab, wie dein Spiel aufgebaut ist, insbesondere welche Datenstrukturen du brauchst.

Aber nehmen wir einmal an, es ist ein Tile-basiertes Spiel. Du könntest einen Dungeon aus Räumen und Gängen in einem beliebigen Malprogramm mit der Rechteck-Funktion ziemlich schnell zusammenpinseln. Dein Spiel würde dann die Bilddatei importieren und daraus ein Level machen: Weiße Pixel sind Boden, schwarze Pixel sind Wände. Das ist jetzt noch recht simpel, aber du kannst als nächstes z.B. die Grafiken für die Tiles zufällig wählen. Jede 25te Bodenplatte hat einen Riss oder so. Oder alle Wand-Tiles die an einen Raum Grenzen werden auf die entsprechende Grafik gesetzt. Also im Wesentlichen eine Reihe prozeduraler Algorithmen die das ziemlich simple importiere Level aufhübschen. Das kann man beliebig weit treiben, z.B. könnten rote Pixel Gegner-Spawns sein und in einer separaten Textdatei wird festgelegt, welche Arten von Gegnern es im Level geben kann.
Lieber dumm fragen, als dumm bleiben!

6

05.01.2021, 23:23

2: Unity erlaubt die grafisch mit Objekten eine Welt "zusammenbauen". Da das aber nur dazu dient, das level zu erstellen könnte man sagen bspw. alle Objekte mit einen Würfel sind Steine, alle Objekte mit einer Kugel sind Münzen. Dieses Objektmodell kannst du über ein Script, welches im Editor läuft auslesen, nach diesen Objekten suchen und dann in eine Datei die Informationen (position bspw.) speichern.
3: Ähnlich wie 2. Du speicherst in deinem Editor dein erstelltes Level. Bei Tiled ist das dann eine XML-Datei, die man einlesen kann. Dann kannst du dir einfach etwas überlegen, was du als was "interpretierst". Unterschied zu zweitens ist nur, dass du eine Datei an statt ein im Editor laufendes Script hast.



Ahh. Ich werde die Level sehr wahrscheinlich auf Basis von Tilemaps bauen, jedoch kann der Spieler sich frei auf diesen bewegen. Danke dir^^

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

7

06.01.2021, 09:13

Und für TileMaps kannst Du dann den schon genannten Tiled nehmen. So hab ich bei Splatter auch angefangen, bis ich dann nen eigenen Editor geschrieben habe.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Werbeanzeige