Wie erkennt man Kollisionen mit nicht rechteckigen Objekten in 2D-Spielen?

7

Das Erkennen von Kollisionen mit rechteckigen Objekten ist recht einfach. Ich kann einfache Spiele auf Kachelbasis schreiben. Jetzt möchte ich lernen, nicht auf Kacheln basierende Spiele zu schreiben, bei denen Objekte möglicherweise nicht rechteckig sind, z. B. ein Berg.

Angenommen, ich möchte ein unebenes Gelände mit Hügeln und Bergen. Wie speichere ich die Form des Geländes? Wie erkenne ich auch die Kollisionen für solche unebenen Objekte?

Cracker
quelle
Sie können diese Frage und ihre Antworten hilfreich finden: gamedev.stackexchange.com/questions/71800/…
async

Antworten:

3

Sie können dies auf verschiedene Arten tun:

Eine davon ist die Verwendung eines groben Kollisionstests mit Bounding-Box-Kollision (ähnlich wie bei Ihrer bisherigen Kollision). Wenn dies erfolgreich ist, führen Sie einen Feinkollisionstest mit pixelgenauer Erkennung durch.

Eine andere Möglichkeit besteht darin, Begrenzungsformen zu verwenden, die jedoch nur den Bereich umgeben, in dem Sie kollidieren möchten, z. B. eine Hitbox, und eine Kreuzungserkennung durchzuführen.

Casey
quelle
2
Wie führe ich einen Feinkollisionstest mit pixelgenauer Erkennung durch?
Cracker
0

Die Geländeform wird normalerweise als Array gespeichert, die sogenannte "Höhenkarte":

height[X][Y]

Sie können einige fraktale Details glätten oder erstellen (normalerweise, wenn die Abmessungen des Arrays klein sind).

Führen Sie keine Kollisionen von Hand durch. Möglicherweise treten Probleme mit der Geschwindigkeit, den Durchdringungen ...

Verwenden Sie konvexe Box2D-Polygone für Seitenroller (Scorched Earth). Für Top-Down-Rollenspiele wie ODE, Havok, Newton , Bullet ... scheinen Höhenkarten unterstützt zu werden, manchmal sogar von Haus aus.

user712092
quelle