Eine Kollisionsabfrage würde ich über die Koordinaten erledigen.
Zu aller erst ist das relativ einfach:
| Zitat: |
if (HindernisBox.Location.X - FliegerBox.Location.X < 10) GebeWarnung();
if (HindernisBox.Location.X - FliegerBox.Location.X <= 0) Kollision(); |
(Ich weiß nicht, ob der Code so funktioniert, ich hab das dumpfe Gefühl, mich bei Eigenschaften-Namen geirrt zu haben, aber ich denke, das reicht aus zum Verständnis)
Das meldet, wenn der Spieler mit dem Gefährt frontal gegen das Hindernis fliegt.
Nun soll auch geprüft werden, ob die unter und obere Kante nicht gegen das Hindernis fliegt und dazu nimmst du die Y-Koordinaten.
Wenn das Objekt unter dem Hindernis durch fliegt, musst du darauf achten, dass die Position des Hindernisses bei der linken oberen Ecke liegt und umgerechnet werden muss, auf die linke untere Ecke.
Wenn es über das Hindernis fliegt, hast du das gleiche Problem, nur bei dem Flieger-Objekt.
Du musst also die Y-Koordinaten der richtigen Kanten berechnen und dann die Differenz bilden.
Ist sie sehr gering, fliegt der Flugkörper sehr nahe, ist sie 0 der kleiner, dann hats gekracht.
Diese Herangehensweise erhebt keinen Anspruch auf Einfachheit, aber ich würde glatt wetten, dass jede ähnliche Funktion irgendwo genauso funktioniert, ob nun in einer Methode eines Frameworks verborgen, oder selber programmiert.
Vielleicht gibt es schon passende Methoden, doch ich kenne sie nicht. Suchen würde ich dann allerdings nicht im .NET-Framework, sondern in XNA, was für zweidimensionale und dreidimensionale Spiele gemacht ist und da braucht es sicherlich auch mal Kollisionsabfragen. ^^