2016-04-16 4 views
0

Ich habe eine JS-Funktion, die das neue dx und dy meines 'player'-Objekts berechnen soll, sobald es von einem anderen (stationären) kreisförmigen Objekt springt. Ich kann den Winkel des Spielers zum 'Torpfosten' finden, aber ich habe Probleme, den Spieler zu handhaben, sobald die Kollision tatsächlich passiert. Ich kann die Kollision anhand der Entfernung zwischen dem Spieler und dem Torpfosten erkennen, indem ich überprüfe, ob sie kleiner oder gleich der Summe der Radien der beiden Objekte ist. Ich kann auch den Winkel berechnen, in dem der Spieler mit den Dx und Dy des Spielers in die Kollision kommt. Ich weiß, dass der Einfallswinkel gleich dem Reflexionswinkel sein sollte, aber ich kann es nicht richtig finden.Wie kann ich ein kreisförmiges Objekt in einem 2D-Spiel von einer kreisförmigen Oberfläche abprallen lassen?

Mein Code ist unten:

var side_one = goal_posts[0].x - player.x; 
var side_two = goal_posts[0].y - player.y; 
var hypotenuse_player_to_post = Math.sqrt(Math.pow(side_one, 2) + Math.pow(side_two, 2)); 
var angle_player_to_post = Math.acos(side_two/hypotenuse_player_to_post) * (180/Math.PI); 
var player_travel_speed = Math.sqrt(Math.pow(player.dx, 2) + Math.pow(player.dy, 2)); 
var player_travel_angle = Math.acos(player.dy/player_travel_speed) * (180/Math.PI); 
var difference = angle_player_to_post - player_travel_angle; 
var resulting_angle = angle_player_to_post + difference; 
resulting_angle = resulting_angle/(180/Math.PI); 
player.dy = Math.cos(resulting_angle) * player_travel_speed; 
player.dx = Math.sin(resulting_angle) * player_travel_speed; 

Jede Hilfe willkommen ist viel! :)

+2

immer Vektoren verwenden, mein Freund, nie trig Funktionen. –

+0

Das stimmt! Ich habe es tatsächlich geschafft, das Problem mit Vektoren und Skalarprodukten meiner Objekte zu lösen, um die resultierenden Vektoren zu erhalten, und ich war tatsächlich erstaunt über die Einfachheit des Codes! Trotzdem, danke für deine Antwort! –

Antwort

0

Wie vorgeschlagen, wurde das Problem mit Vektoren anstelle von Trigonometrie gelöst.

Verwandte Themen