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

25.03.2013, 10:32

[Tiled Map] Kollision mit Umgebungs-Objekten

Hi, ich arbeite an einer kleinen Tile-based Game Engine und verwende isometrische Kacheln. Diese werden ganz normal über die Map gekachelt und besitzen derzeit eine Kollisions-ID, um z.B. fliegende Objekte passieren zu lassen und laufende Objekte zu blockieren. Das funktioniert soweit ganz gut.

Nun habe ich überlegt "Umgebungs-Objekte" (Bäume, Treppen usw.) als Objekte einzufügen. Bisher besitzen meine Objekte ebenfalls eine Kollisions-ID anhand der benachbarte Objekte und Kacheln zur Kollisionserkennung verglichen werden. Bei Bäumen stellt das kein Problem da, bei Treppen allerdings schon. (Beispiel siehe Anhang).

Lasse ich die Kollision in diesem Fall weg (weil die Treppe begehbar sein soll), kann ich dann aber von allen Richtungen über die Treppe drüberlaufen. Eine andere Lösungsmöglichkeit wäre, die Treppe in Kacheln zu zerlegen, diese einzeln zu zeichnen und jeweils mit verschiedenen Kollisions-IDs zu versehen. Wirklich toll ist das nicht.

Habt ihr eine Idee für mich?

/EDIT: Aktuell bastel ich an einem kleinen Karteneditor. Wäre es da besser die Kollision von der Art der Kachel loszulösen und "separat" zu setzen? D.h. jeder Tile auf der Map (nicht im Tileset) eine Kollisions-ID zuzuordnen?

LG Glocke
»Glocke« hat folgendes Bild angehängt:
  • stairs.png

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Glocke« (25.03.2013, 10:41)


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

25.03.2013, 10:45

Könntest du nicht alle Tiles um die Treppe herum als nicht begehbar machen und nur das direkt vor der Treppe begehbar?
Dann wäre die Richtung klar. Wäre jetzt die einfachste Methode die mir spontan einfiele.

Und wieso bastelst du an einem eigenen Karteneditor wenn ich fragen darf. Weswegen reicht bspw. Tiled nicht aus?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

3

25.03.2013, 10:56

Die uebliche Loesung waere, das eine Treppe eine spezielle ID bekommt, die dann eben genau so behandelt wird, wie das sein muss. Also fuer dein Beispielbild, z.b. die ID 27, die du dann alle Treppen zuweist, die von SuedWest nach Nordost fuehren. Bei der Kollisionsbehandlung von ID 27 muessen dann eben die Richtungen auch abtesten.

Ein abstrakteres Beispiel fuer sowas: http://www.games-net.de/hosted/tggc/scor…ery_screen3.png

4

25.03.2013, 11:01

Könntest du nicht alle Tiles um die Treppe herum als nicht begehbar machen und nur das direkt vor der Treppe begehbar?
Dann wäre die Richtung klar. Wäre jetzt die einfachste Methode die mir spontan einfiele.


Hmm okay, wäre eine Lösung :)

Und wieso bastelst du an einem eigenen Karteneditor wenn ich fragen darf. Weswegen reicht bspw. Tiled nicht aus?


Des Lernens wegen ;-)

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

25.03.2013, 11:35

Die Lösung von Architekt funktioniert aber nur bedingt. Du musst deine Karten so anordnen, dass du das immer gewährleisten kannst. Soll man aber direkt neben der Treppe laufen können, nur nicht drauf, so hast du ein Problem. Wer weiß, vielleicht kommen hinterher noch neue Tiles hinzu, wie zum beispiel Stufen die man herunterspringen kann, jedoch nicht hinauf kommt. Wenn du nun TGGCs Lösungsweg nimmst, ist das ganze kein Problem. Bestimmte Tiles werden gesondert behandelt, sodass klar ist, von welchen Seiten und in welche Richtung sie begangen werden können. Genau so müssen diese Tiles wissen, wie du von ihnen runter kommen kannst.
„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.“

6

25.03.2013, 11:38

Die Lösung von Architekt funktioniert aber nur bedingt. Du musst deine Karten so anordnen, dass du das immer gewährleisten kannst. Soll man aber direkt neben der Treppe laufen können, nur nicht drauf, so hast du ein Problem.


Naja eigentlich nicht: wenn ich die Bodenkacheln der Treppe blockiere (also die Grundfläche auf der die Treppe steht) und sie nicht stur vor der Spielfigur rendere, müsste ich drumrumlaufen können und von der Treppe teilweise verdeckt werden.

Bei der Sache mit dem Springen usw. habe ich dann aber trotzdem das Problem. Allerdings finde ich das sehr speziell - kp ob ich es überhaupt brauche.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

25.03.2013, 12:23

Statt TGGC's Lösung würde ich persönlich einen generischen Ansatz mit Polygonen/Linien für Wände bevorzugen.
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]

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

8

25.03.2013, 12:42

Die Treppen sind meines Erachtens nach ein erster Schritt in Richtung (vereinfachte) 3D-Physik mit 2D Darstellung. Dabei können die verwendeten Kollisionsboxen einfache geometrische Figuren sein (bspw. ausschließlich Quader). Wenn man den Ansatz so weitergeht, ist es auch einfach, Wände zu implementieren, gegen die man gegen, aber nicht hindurch laufen kann, Vorsprünge, von denen man runterspringen kann usw. Weiterhin könnte dann die vertikale Position des Charakters auf dem Bildschirm dessen Höhe angepasst werden, da man die Höhe seinese Untergrunds kennt.
Allerdings ist diese herangehensweise weniger einfach in der Umsetzung, als die anderen Vorschläge. Je nachdem, was du vor hast, kann eine der vorherig genannten Lösungen bereits ausreichend sein und aufgrund des geringen Umsetzungsaufwands wäre diese dann zu präferieren.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

9

25.03.2013, 14:31

Je nachdem, was du vor hast, kann eine der vorherig genannten Lösungen bereits ausreichend sein und aufgrund des geringen Umsetzungsaufwands wäre diese dann zu präferieren.


Die Treppen verwende ich maximal als Gelenkstellen um von einer zur anderen Map zu gelangen. Ich denke daher sollte der Ansatz
Könntest du nicht alle Tiles um die Treppe herum als nicht begehbar machen und nur das direkt vor der Treppe begehbar?

vollkommen ausreichend sein.

Die Sache mit den Linien und/oder Polygonen wäre imho für komplexere Kollisionsszenarien geeigneter.

LG Glocke

10

03.04.2013, 20:19

Wen es interessiert: Ich habe die Kollisionsinformationen von den Tiles losgelöst. Stattdessen setze ich für jede Kachelkoordinate Kollisionsinformationen ("frei", "nur fliegende Objekte", "keine Objekte"). Das funktioniert super, auch in Verbindung mit der Treppen-Kollision (nur nicht mit dem Rendering selbiger ^^)

LG Glocke

Werbeanzeige