Hallo Andreas,
die Reduktion des Sprites auf einen Kreis ist natürlich eine vereinfachende Approximation, die die Programmierung erleichtert und die Laufzeit reduziert.
Die Prüfung, ob ein Kreis ein Quadrat berührt, muss anders programmiert werden. Aus der Hüfte geschossen würde ich sagen, das geht so:
Sei $$(x_K,y_K)$$ der Mittelpunkt eines Kreises mit Radius r.
Sei Q ein Quadrat mit diagonal gegenüberliegenden Eckpunkten $$(x_1,y_1), (x_2, y_2)$$ und durch passende Sortierung sei $$x_1<=x_2$$ und $$y1<=y2$$. Dann muss man folgende Fälle unterscheiden:
$$x_K+r \lt x_1 \vee x_K-r \gt x_2$$ ⇒ Keine Kollision (Kreis weit genug links/rechts)
$$y_K+r \lt y_1 \vee y_K-r \gt y_2$$ ⇒ Keine Kollision (Kreis weit genug drüber/drunter)
$$x_K \le x_1 \land y_K \le y_1 \land ||(x_K,y_K),(x_1,y_1)|| > r$$ ⇒ Keine Kollision (Abstand zur linken obere Ecke)
$$x_K \ge x_2 \land y_K \le y_1 \land ||(x_K,y_K),(x_2,y_1)|| > r$$ ⇒ Keine Kollision (Abstand zur rechten obere Ecke)
$$x_K \le x_1 \land y_K \ge y_2 \land ||(x_K,y_K),(x_1,y_2)|| > r$$ ⇒ Keine Kollision (Abstand zur linken unteren Ecke)
$$x_K \ge x_2 \land y_K \ge y_2 \land ||(x_K,y_K),(x_2,y_2)|| > r$$ ⇒ Keine Kollision (Abstand zur rechten unteren Ecke)
SONST: Kollision.
Natürlich würde man für den Abstand nicht $$\sqrt{(x_K-x_1)^2+(y_K-y_1)^2} > r$$ testen, sondern $$(x_K-x_1)^2+(y_K-y_1)^2 > r^2$$, das geht schneller und man muss r² nur einmal berechnen.
Also: Viel mühsamer und langsamer als die Kollision zweier Kreise. Ob meine Approximation trägt, hängt von der Form des Sprites ab. Ob man einen Test Kreis vs Quadrat machen muss, ebenfalls. Effiziente Kollisionserkennung ohne Hardwareunterstützung ist eine Wissenschaft für sich.
Rolf
sumpsi - posui - clusi