检测碰撞方向

sli*_*fty 13 collision-detection

方形瓷砖与另一个方形瓷砖碰撞.酒保说......

我有:

  • 两个瓷砖的高度,宽度,x和y.
  • 导致碰撞的运动的2D矢量.

我需要知道发生碰撞的情况(例如,顶部,底部,左侧,右侧),以便适当地重置位置.

我会给那些能回答这个问题的人一个精神上的好奇心,因为我已经尝试了太多时间,这似乎是根本的.

Pho*_*nic 18

float player_bottom = player.get_y() + player.get_height();
float tiles_bottom = tiles.get_y() + tiles.get_height();
float player_right = player.get_x() + player.get_width();
float tiles_right = tiles.get_x() + tiles.get_width();

float b_collision = tiles_bottom - player.get_y();
float t_collision = player_bottom - tiles.get_y();
float l_collision = player_right - tiles.get_x();
float r_collision = tiles_right - player.get_x();

if (t_collision < b_collision && t_collision < l_collision && t_collision < r_collision )
{                           
//Top collision
}
if (b_collision < t_collision && b_collision < l_collision && b_collision < r_collision)                        
{
//bottom collision
}
if (l_collision < r_collision && l_collision < t_collision && l_collision < b_collision)
{
//Left collision
}
if (r_collision < l_collision && r_collision < t_collision && r_collision < b_collision )
{
//Right collision
}
Run Code Online (Sandbox Code Playgroud)

当对象在另一个内部时,这不能解决.但它确实与重叠有关

  • 只是想扩展这个因为它不是立即清楚这里发生了什么:播放器/瓦片底部和右边分别代表播放器和磁贴的底部和右侧.b_collision表示图块底部与播放器顶部之间的距离.如果玩家从底部与瓷砖碰撞,这将是最小的边之间的距离,这正是检查是否确实存在底部碰撞的情况.检查其他碰撞与其他方面做同样的事情. (4认同)