如何在2D游戏中从圆形表面反弹圆形物体?

时间:2016-04-16 23:11:25

标签: javascript 2d collision

我有一个JS函数,它应该计算我的'玩家'对象的新dx和dy,一旦它从另一个(静止的)圆形对象反弹。我可以找到球员对“球门柱”的角度,但是一旦碰撞实际发生,我就无法处理球员。我可以通过检查玩家和球门柱之间的距离来检查它是否小于或等于两个物体的半径之和。我还可以使用玩家的dx和dy计算玩家进入碰撞的角度。我知道入射角应该等于反射角,但我似乎无法做到正确。

我的代码如下:

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;

非常感谢任何帮助! :)

1 个答案:

答案 0 :(得分:0)

如所建议的那样,使用向量而不是三角函数来解决问题。