www.codeworx.org/game-dev/einfache Kollisionskontrolle

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