gpt4 book ai didi

java - 修复碰撞检测穿透

转载 作者:行者123 更新时间:2023-12-02 14:11:07 24 4
gpt4 key购买 nike

我正在游戏中实现碰撞检测,但在理解如何计算 vector 以修复碰撞时的形状重叠时遇到了一些困难。

例如,我有两个正方形。 squareAsquareB。对于它们两个,我都知道它们的 xCoyCowidthheight。然而,squareA 正在移动,因此他有速度大小和速度角度。假设我每秒更新一次游戏。我在下面说明了这种情况。

shapes before movement

shapes after movement

现在,我需要一个公式来获取 vector 来修复重叠。如果我将此 vector 应用到红色方 block (squareA) 上,它们不应该再重叠。这就是我想要实现的目标。

enter image description here

谁能帮我算出 vector 的计算公式吗?

如果用 Java 构建,则可获得奖励积分。

如果您输入答案而不是链接到碰撞检测教程,则会获得额外奖励积分。

谢谢大家!

另外,如何计算新的速度幅度角度?我希望 sqaureA 继续沿 x 轴移动(沿蓝色方 block 的顶部滑动)

最佳答案

我有一个看起来像这样的函数:

Position calculateValidPosition(Position start, Position end)
Position middlePoint = (start + end) /2

if (middlePoint == start || middlePoint == end)
return start

if( isColliding(middlePont) )
return calculateValidPosition(start, middlePoint)
else
return calculate(middlePoint, end)

我只是即时编写了这段代码,因此还有很大的改进空间......从不使其递归开始。

当检测到碰撞时,将调用此函数,并将对象的最后一个有效位置和当前无效位置作为参数传递。在每次迭代中,第一个参数始终有效(无冲突),第二个参数无效(有冲突)。

但我认为这可以让您了解可能的解决方案,以便您可以根据自己的需求进行调整。

关于java - 修复碰撞检测穿透,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22146530/

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