2017-11-28 6 views
0

Ich bin ein grundlegendes Javascript-Spiel Breakout machen, aber ich habe nicht wirklich Mathe gelernt noch so bin ich einige Probleme mit ..Breakout-Spiel Mathe - Winkel dx, dy

Ich will den Ball die getroffen haben paddeln und in einem Winkel abprallen, abhängig davon, wo es auf das Paddel trifft.

Ich habe gerade diese Funktion gemacht, die einen Winkel von 0-180 Grad berechnet, wenn der Ball das Paddel trifft. Das ist der Winkel, in dem sich der Ball bewegen muss (ich weiß jetzt, dass das ein Problem sein wird, wenn der Ball die Spitze des Paddels trifft, aber ich werde mich später damit befassen) Jetzt muss ich einen Weg finden, um einen zu bekommen dx und dy davon, und ich weiß, dass ich dazu Trigonometrie verwenden muss. (X ist die Variable für den x-Koordinate Ball)

function getBallAngle(){ 
const maxAngle = 180; 
let hitPosition = (x - paddleX); 
let ballAngle = 0; 
const scaleToAngle = maxAngle/(paddleWidth); 

ballAngle = hitPosition * scaleToAngle; 

return ballAngle; } 

Ich bin ein bisschen jetzt verloren, würde einige mathematische Hilfe schätzen, bitte.

bearbeiten: Ich habe bereits das Spiel funktioniert, aber ohne diese Funktion, die den Winkel der Ball springt vom Paddel ändern würde.

+0

Ihre Mathe wird im Moment denselben Outbound-Winkel ergeben, wenn der Ball den gleichen Punkt auf dem Paddel trifft, unabhängig vom Inbound-Winkel. Um einen ausgehenden Winkel richtig zu berechnen, müssen Sie den eingehenden Winkel wirklich kennen. – Forty3

+0

In Javascript sind Winkel im Bogenmaß angegeben. Um von Grad in rad zu konvertieren 'angleRadians = angleDeg * (Math.PI/180)' Wenn Sie einen Winkel im Bogenmaß haben, können Sie das 'dx',' dy' dieses Winkels mit 'dx = Math.cos (angleRadians) erhalten 'und' dy = Math.sin (angleRadians) 'Zero deg ist rechts bei 3oclock. Wenn du nur dx und dy hast und den Winkel in Radiant 'winkel willstRadians = Math.atan2 (dy, dx)' mit dy zuerst – Blindman67

+0

Oh, und wenn du den Ball als Geschwindigkeit 'speed' willst, dann' dx = Math.cos (angleRadians) * speed; 'und' dy = Math.sin (angleRadians) * speed; ' – Blindman67

Antwort

0

Betrachten Sie die bewegliche Kugel sowohl eine x und eine y Komponente (wie Sie implizierten mit Ihrer Anfrage für dx und dy) hat mit. Da Sie dies in Javascript schreiben, können diese Werte Ihrem Objekt ball zugewiesen werden, so dass sie bei jedem Tick referenziert werden können (d. H. Jedes Mal, wenn Ihr Programm den aktuellen Status des Spiels berechnet und alle Anzeigeobjekte neu rendert).

Angenommen, wir haben nur mit dem Paddel zu tun, dann können wir annehmen, dass sich der horizontale Bewegungsfaktor (x) nicht ändert (wir wollen nicht, dass der Ball rückwärts fliegt) vom Paddel .. außer im wörtlichen Rand Fall ..). Und da wir das Paddel wie eine reflektierende Oberfläche behandeln, wird der vertikale Bewegungsfaktor (y) einfach von einer Abwärtsbewegung zu einer Aufwärtsbewegung wechseln (am einfachsten durch Multiplikation mit -1).

Daher ist der "Winkel", den Sie suchen, eigentlich nur eine Umkehrung der y Komponente Ihrer Ballbewegungseigenschaft.

+0

Ich möchte den gleichen Outbound Winkel, wenn der Ball die gleiche Stelle auf dem Paddel trifft, um die Spielvariation zu geben. Ohne dass sich x ändert, ändert sich das Spiel nicht und das Spiel wird jedes Mal auf die gleiche Weise ausgeführt, vorausgesetzt, dass der Spieler niemals einen Ball verfehlt. Trotzdem danke. –