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

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

1

28.05.2013, 10:47

Map Editor

Ich schiebe jetzt schon länger ein Problem vor mir her.

Ich programmiere eher zum üben derzeit ein 2D Top Down Game, welches aus einer TileMap besteht. Damit ich nicht jede einzelne Map per Hand in eine .txt schreiben muss, will ich jetzt endlich mal den MapEditor fertig stellen. Ich werde mich zur Erklärung öfter auf das bild im Anhang beziehen.

Das rote Quadrat soll ein neues Tile darstellen, welches per Drag&Drop per Maus an die benötigte Stelle gezogen wird. Es kann ja nicht jedes Tile an eine beliebige Position gesetzt werden, sondern nur in einem bestimmten Raster. Deswegen würde ich gerne, dass das rote Quadrat zwischendruch "einrastet", also man bewegt die Maus und das Quadrat(später ein Tile) bewegt sich mit, aber rastet immer an der Tile Position, an der sich die Maus grade befindet ein.

Dadurch entstehen für mich mehrere Probleme:
Zum einen weiss ich nicht wie ich das genau berechnen soll, zumal das neue Tile ja einen Position kommt, die es vorher noch nicht gibt, also Beispiel (10,-1).

Ausserdem soll es möglichst dynamisch sein, ich möchte nicht dass man am Anfang eine feste Grösse (100x100 Tiles) eingibt, sondern dynamisch neue "Zeilen und Spalten" angelegt werden.

Genau bei dieser Umsetzung, komme ich nicht weiter.

Denkanstösse oder andere Tipps wären sehr hilfreich.

EDIT: Ich benutze C++ und SFML ;)

Vielen Dank,
ERROR
»ERROR« hat folgendes Bild angehängt:
  • screen.png

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ERROR« (28.05.2013, 11:08)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

28.05.2013, 11:26

weiss ich nicht wie ich das genau berechnen soll
Du berechnest die Zeile und Spalte, in der sich die Maus befindet. Vermutlich sowas wie "X=Mouse.X/SpaltenBreite" und "Y=Mouse.Y/ZeilenHöhe" - abrunden auf ganze Zahlen! Für das Rechteck ergibt sich damit eine Koordinate von "(X*SpaltenBreite / Y*ZeilenHöhe)". Ist doch keine Magie, oder?

Wenn Du außerdem in eine Region klickst/zeigst, die außerhalb Deiner maximalen X- oder Y-Koordinate liegt, legst Du eben eine neue Spalte/Zeile an.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

3

28.05.2013, 11:53

Gut, vielleicht habe ich es etwas doof ausgedrückt.

Die Berechnung habe ich bereits so. Mein Problem ist eher, dass ich nicht sicher bin, wie das mit Tiles ausserhalb der bisherigen Grösse umsetzen soll. Ist das nicht unnötig aufwendig, wenn ich jedesmal wenn die Maus ausserhalb des bisherigen Bereiches ist eine neue Spalte/Zeile an das Array ranklatsche? ich meine bei einer grossen Map muss ja alles verschoben werden, wenn ich am Anfang etwas änderen möchte.

Oder is tes normal, dass man das so macht?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

28.05.2013, 12:56

Normal legt man die Größe einer Map direkt am Anfang fest. Guck dir vielleicht mal fertige Editoren an. Ich kann Tiled empfehlen. Wenn es nur um den Nutzen eines Editors geht, dann greif möglicherweise direkt auf Tiled zurück. Der wird vermutlich um einiges besser sein als jeder Editor den du fertig stellen wirst. Nicht weil ich dir unterstelle so einen Editor nicht entwickeln zu können, sondern weil sowas extrem viel Zeit kostet und man diese Zeit meistens doch lieber in die Spiele selbst steckt. Vorteil ist, Tiled kommt mit einigen Exportformaten und kann durch eigene Plugins so erweitert werden, dass man sich seine eigenen Formate exportieren lassen kann. Egal ob du ihn benutzen willst oder nicht, guck ihn dir vielleicht einfach mal an. Wenn auch nur als Inspiration.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

5

28.05.2013, 15:01

Danke euch beiden und vorallem Schorsch.

Also es geht mir natürlich um das viel einfachere Erstellen einer Map, also um das Benutzen, aber ich möchte es auch einfach mal machen und üben, deswegen wollte ich ihn selber programmieren.

Ich habe mir Tiled angeguckt und konnte echt gut Ideen sammeln, danke für den Tipp und ich werde das System mit der vorher festgelegten Grösse übernehmen.


Vielen Dank nochmal ;) :thumbup:

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

28.05.2013, 15:20

Die Mapgröße zur Laufzeit anpassen zu können ist aber auch eine feine Sache. Die Idee mit einem einfachen Klick an den Rand finde ich eigentlich ziemlich gut. Das könnte man sicher super als Feature gebrauchen. Solltest du drüber nachdenken.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

7

29.05.2013, 11:15

Ich denke, dass man die Grösse erweitern kann, werde ich mit reinnehmen ;)

Eine Frage hätte ich nochmal.

Zurzeit habe ich mehrere Arrays für die verschiedenen Objekte.
Ich habe zB den Boden, Objekte(Bäume/Häuser usw).

Allerdings benutzen alle anderen Programme(die ich kenne) nur "normale" Tiles, welche dann alles darstellen.

Sollte ich mein Spiel lieber auch darauf umbauen oder bei meinem System bleiben, ich meine es gibt ja schon nen Grund, dass es alle so machen ;)

Durch meine Methode kann ich meiner Meinung nach relativ einfach Aktionen mit den Objekten(Schalter, Türen usw) machen.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

29.05.2013, 14:54

Normalerweise arbeiten Map Editoren mit Layern. Wie bei Tiled auch. Du machst dir eine Untergrundlayer mit allen Bodentiles. Darauf kannst du dann mehrere Layer setzen zum Beispiel für Objekte wie Bäume, Häuser etc. Im Prinzip kannst du dir beliebig viele Layer ausdenken. Möglicherweise eine für den Himmel, falls du zum Beispiel Wolken über die Szene rendern möchtest. Wenn du eine Layer für Schalter etc benötigst, dann leg diese halt an. Ob du jetzt nur einfache Tiles einbaust oder noch mehr ist dir überlassen. So kannst du theoretisch auch eine Layer für Trigger und so Dinge benutzen. Was du aber genau auf der Karte verteilst bleibt dir überlassen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

9

29.05.2013, 15:38

Nur aus Interesse und weil es zum Thema passt.

Ich habe noch nie was mit Tiles oder so erstellt. Ich frage mich nur ob es nicht einfacher ist anstatt für jede Koordinate den Inhalt zu Speichen für jedes benutzte Asset eine Liste mit Koordinaten (x, y, z für die zeichenreihenfolge). So müsste man sich doch eigentlich keine Gedanken über die Ausdehnung machen.

Kann aber auch sein, dass ich das hier grad etwas falsch verstanden habe :sleeping:
:love: := Go;

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

10

30.05.2013, 15:08

Es geht darum, dass der Editor intern ein 2D Raster speichern muss. Dafür verwendet man normalerweise Datenstrukturen wie ein Array oder std::vector. Du musst also die Größe möglichst kennen. Sollte die Größe sich zur Laufzeit verändern, so muss normalerweise einiges hin und her kopiert werden. Das möchte man einerseits minimal halten, andererseits ist es aber nicht doof die Möglichkeit offen zu halten.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige