gpt4 book ai didi

c++ - 矩形之间的 block 移动C++(完成碰撞)

转载 作者:行者123 更新时间:2023-12-02 10:07:56 25 4
gpt4 key购买 nike

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

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循环直到它不发生碰撞,留下较小的值以使其不会发生碰撞,但是它要么不起作用,要么陷入无限循环中。

最佳答案

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

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

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

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

希望这可以帮助。

关于c++ - 矩形之间的 block 移动C++(完成碰撞),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59253945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com