Ich mache Pong, und finde es wirklich schwierig, einen Algorithmus zu schreiben, der den Ball richtig von den vier Wänden abprallt (ich werde später, weil nur ein Teil des West + Ost Seiten werden Ziele sein). Im Moment möchte ich, dass der Ball um die Kiste springt.Box Kollisionserkennung und Bouncing
Das Erkennen, ob der Ball eine Wand getroffen hat, ist einfach, aber ich habe Probleme, den neuen Winkel zu berechnen.
Dies ist, was ich mit so weit habe kommen:
if(dstY == 0) {
// North wall
if(angle < 90) {
newAngle = angle + 90;
} else {
newAngle = angle - 90;
}
} else if(dstX == maxWidth) {
// East wall
if(angle < 90) {
newAngle = angle + 270;
} else {
newAngle = angle + 90;
}
} else if(dstY == maxHeight) {
// South wall
newAngle = angle + 90;
} else if(dstX == 1) {
// West wall
if(angle < 270) {
newAngle = angle - 90;
} else {
newAngle = angle - 270;
}
}
, die nur für etwa die Hälfte der Kollisionen arbeitet, und sieht wirklich hässlich. Ich bin mir sicher, dass dies wirklich einfach sein sollte und dass es schon oft gemacht wurde.
In meinem Code sind dstX/dstY die X/Y-Zielkoordinaten. X = 0 und y = 0 oben links.
Können Sie beschreiben, wie es scheitert? Was passiert, wenn der Ball genau in einer Ecke schlägt? –