Pong mit Javascript, Probleme mit Difference?

... komplette Frage anzeigen

1 Antwort

Dein Problem liegt beim Kollisionscheck. Kollisionschecks über die Distanz funktioniert nur bei kreisförmiger Hitbox, da du aber ein Rechteck hast, musst du anders vorgehen.

Aus Gründen der Vereinfachung kannst du beim Ball auch von einem Rechteck ausgehen.

Du überprüfst als erstes, ob sich die Kanten der beiden Rechtecke überhaupt schneiden. Um zu überprüfen, ob sich die Rechtecke nicht schneiden, kannst du das wie folgt machen:

if(RechteckA.Rechts < RechteckB.Links || RechteckA.Links > RechteckB.Rechts || RechteckA.Unten < RechteckB.Oben || RechteckA.Oben > RechteckB.Unten)

Als nächstes musst du, um den Ball in die richtige Richtung wieder zurückzuschlagen, die Kollisionsrichtung bestimmen, was du machen kannst, indem du die Abstände zwischen den jeweiligen Kollisionsseiten (Ball.Rechts mit Player.Links, Ball.Oben mit Player.Unten usw.) vergleichst und die Kollisionsrichtung mit dem geringsten Abstand verwendest. Anschließend einfach die Geschwindigkeit verändern.

Umgesetzt sieht das ganze wie folgt aus:

http://pastebin.com/Dds1LpLP

Mal nebenbei solltest du auf Konsistenz zwischen den Benennungen der Variablen achten. Während beim Rechteck die Werte x und y jeweils die obere linke Ecke des Rechtecks repräsentieren, ist es beim Ball der Mittelpunkt des Balls, was sehr schnell verwirrend werden kann. Desweiteren wird bei dir die Höhe über "speed" angegeben, ich glaub das war vorher vielleicht anders geplant gewesen?

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?