Die einfache Kollisionskontrolle
Fast alle Spiele beruhen im wesentlichen auf Kollisionskontrollen. Dabei wird
gepüft ob zwei Objekte sich berühren (oder überschneiden). Man
vereinfacht hierbei die Objekte zu Rechtecken (natürlich nur rechnerisch!).
(Das hört sich sehr ungenau an, aber in der Praxis wird der Spieler davon
nichts merken...) Man weist den verwendeten Objekten Eigenschaften zu, wie:
X-Position, Y-Position, Höhe und Breite. Unsere Objekte haben also folgende
Eigenschaften:
struct objekt
{
int x;
int y;
int breite;
int hoehe;
};
Bei der eigentlichen Abfrage werden nacheinander alle Fälle die nicht
zur Kollision führen würden, ausgeschlossen. (Wenn die Funktion "true"
zurückgibt, fand eine Kolliosion statt, ansonsten nicht):
bool kollision(objekt objekt1,objekt objekt2)
{
if (objekt1.x > objekt2.x + objekt2.breite) return(false);
if (objekt1.y > objekt2.y + objekt2.hoehe) return(false);
if (objekt2.x > objekt1.x + objekt1.breite) return(false);
if (objekt2.y > objekt1.y + objekt1.hoehe) return(false);
return(true); // Die Objekte sind kollidiert!
}
Diese Abfrage läuft recht schnell, da in manchen Fälle eine Kollision
schon nach einem einzigen Vergleich ausgeschlossen werden kann. (Wenn sich z.B.
objekt1 sehr weit rechts von objekt2 befindet, kann es zu keiner Kollision kommen
(Dieser Fall wird schon bei der ersten Abfrage ausgeschlossen!))
Ich hoffe es war halbwegs verständlich, bei aufkommenden Fragen, Kommentaren
und entdeckten Fehlern, bitte an webmaster@codeworx.org
mailen. Der Code darf völlig frei verwendet werden, wenn ihr dieses Tutorial
irgendwo anders veröffentlichen wollt, fragt bitte vorher ;)
Hans-Jakob Schwer, 25.12.2001, codeworx.org