矩形之间的块移动c ++(完成碰撞)

问题描述 投票:0回答:1

我有两个矩形,其中一个固定。每当我尝试将一个移动到另一个时,我都希望它“滑动”而不是被卡住而无法移动。我使用了定向的边界框,并且代码已经过相当的测试,但是我不知道如何避免它们卡住。

Collision between two rectangles

当前我正在做什么:

o1 = o;

vector2df vxy = o.V;

o1.Pos += vxy;

if(o1.overlaps(o2)){

  o1 = o;
  o1 += vector2df(0.f, vxy.y);

  if(o1.overlaps(o2)){
    vxy.y = 0;
  }

  o1 = o;
  o1 += vector2df(vxy.x, 0.f);

  if(o1.overlaps(o2)){
    vxy.x = 0;
  }

}

o1.V = vxy

这很“肮脏”,因为它只是检查移动是否可以在X和Y中完成,如果单独碰撞则禁用它。

速度是一个浮点数,因此稍后将其相加。

我曾经考虑过进行一次while循环,直到它不发生碰撞,留下较小的值,使其不会发生碰撞,但是它要么不起作用,要么陷入无限循环中……

c++ collision
1个回答
0
投票

我想要做的第一件事就是倒回移动盒的运动,以使其不再与固定盒发生碰撞。现在,您的盒子可能处于碰撞状态,因此无限循环。

然后要确定移动框的新速度,您可能希望从移动框与之碰撞的固定框中获取边缘的方向,并将其设置为新速度。

[您可能还希望在某个时候将此新速度乘以初始速度的C0和新方向,以便当移动框垂直于固定框的边缘时,它基本上会停止,但是如果移动在一个锐角下,它不会失去太大的速度。

所有这些都描述了一种过于简化的方法,如果您希望获得更简洁的结果,则可能需要阅读有关基本游戏引擎/物理/碰撞检测的更多信息。

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.