Wie kann ich einen komplexen Kollisionsbereich auf einer Kachelkarte definieren?

13

Wie von vielen empfohlen, benutze ich den Tiled Map Editor , um eine Karte für mein Spiel zu erstellen. Dies ist besonders gut, da das libgdx-Framework auch eine API für Karten von Tiled bietet.

Ich verstehe, dass ich im Karteneditor kollidierbare Kacheln definieren kann oder nicht, damit ich mit jeder Kollision in meinem Code umgehen kann. Aber ich bin momentan in der Situation, dass ich eine Kachel in kollidierbare und nicht kollidierbare Bereiche unterteilen muss. Manuell denke ich, ich kann Punkte und Grenzlinien der beiden Bereiche definieren und programmatisch damit umgehen. Aber das ist viel zeitaufwändige Arbeit.

Also habe ich viel gegoogelt und diesen Physik-Körper-Editor gefunden. Dies scheint ein großartiges Werkzeug zu sein, um den oben erwähnten Prozess zu automatisieren. Das System funktioniert jedoch mit jedem entpackten Image und ich bin mir nicht sicher, ob es funktionieren würde, selbst wenn ich das Image für den Betrieb entpacke.

Ich frage mich, ob es eine bessere Möglichkeit gibt, diesen gesamten Prozess der Definition des Kollisionsbereichs durchzuführen. Jeder Vorschlag wird sehr geschätzt.

Tae-Sung Shin
quelle

Antworten:

22

Wie immer werde ich nur ein paar Ideen auf den Tisch werfen. Es gibt sicherlich mehrere Möglichkeiten, wie Sie dieses Problem angehen können. Ich beschreibe die drei, an die ich mich erinnern konnte, und es liegt an Ihnen, zu entscheiden, welcher dieser Ansätze (wenn überhaupt) für Ihr Projekt gut ist.

Idee 1: Wiederholbare Muster in Ihren Fliesen

Muss Ihr System flexibel genug sein, um alle denkbaren Kollisionsbereiche zu unterstützen, oder können Sie es möglicherweise in eine endliche Reihe von Kachelformen aufteilen, mit denen Sie bauen können, und diese als Sonderfälle behandeln? Hier sind ein paar Ressourcen, die Sie zu dieser Idee lesen können:

Idee 2: Ignorieren Sie die Tilemap

Ja, ignorieren Sie die Kachelkarte vollständig und speichern Sie eine andere polygonale Darstellung Ihres Kollisionsbereichs. Überlagern Sie dann diese Geometrie mit Ihrer kachelbasierten Karte und behandeln Sie Kollisionen damit. Wenn Sie keine Physik benötigen, überprüfen Sie die folgende Ressource:

Ansonsten könnten Sie wahrscheinlich das Tool verwenden, mit dem Sie verlinkt sind.

Idee 3: Pixelgenaue Kollisionserkennung

Verwenden Sie pixelgenaue Kollisionen und verwenden Sie eine separate Maske oder nur den Alphakanal in Ihren Kacheln, um Ihre variablen Kollisionsbereiche zu kodieren. Inspiration finden Sie in der folgenden Anleitung:

  • Physik in Sonic - Solid Tiles

    Wenn eine Kollision direkt mit Kachelpixeln wie diesen durchgeführt wird:

    Bildbeschreibung hier eingeben

    Und eine entsprechende Antwort , die auch relevant sein könnten hier .

David Gouveia
quelle