gpt4 book ai didi

math - 二维连续碰撞检测

转载 作者:行者123 更新时间:2023-12-04 16:00:34 25 4
gpt4 key购买 nike

我正在尝试为我的乒乓球游戏实现简单的连续碰撞检测,但是我不确定我是否正在实现或理解这一点。 AFAIR 连续碰撞检测用于快速移动的物体,这些物体可能会绕过另一个物体绕过正常碰撞检测。

所以我尝试的是,因为我拥有的唯一快速移动的物体是一个球,所以我只需要球的位置,它的移动速度,以及我们正在比较的物体的位置。

由此我认为最好是,例如,如果球的移动速度表明它正在向左移动,我会将它的最左侧边界与另一个对象的最右侧边界进行比较。从这个开始,我将通过将移动速度添加到球的最左侧边界并进行比较以确保它大于其他对象的右侧边界。这将表明没有左右碰撞。

我有一些工作,但不幸的是,球开始正常弹跳一段时间,然后它就像在没有任何东西的情况下击中桨一样。

我有点迷茫,任何帮助将不胜感激!

static bool CheckContinuousCollision(PActor ball, PRect ballRect, PActor other, PRect otherRect)
{
PVector ballMoveSpeed;
int ballXLimit;
int ballYLimit;

ballMoveSpeed = ball.moveSpeed;

// We are moving left
if ( sgn(ball.moveSpeed.x) < 0 )
{
ballXLimit = std.math.abs(ballMoveSpeed.x) / 2;

for ( int i = 0; i <= ballXLimit; i++ )
{

if ( ballRect.Left < otherRect.Right && otherRect.Left < ballRect.Left)
{
return true;
}

ballRect.Left -= i;
}
}

//We are moving right
if ( sgn(ball.moveSpeed.x) > 0)
{
ballXLimit = std.math.abs(ballMoveSpeed.x) / 2;

for ( int i = 0; i < ballXLimit; i ++ )
{

if ( ballRect.Right > otherRect.Left && ballRect.Right < otherRect.Right )
{
return true;
}

ballRect.Right += i;
}
}
// we are not moving
if ( sgn(ball.moveSpeed.x) == 0)
{
return false;
}
}

最佳答案

您似乎只检查了一个维度的碰撞,即您的球与另一个的 X 维度。

您可能想要的是比较两个对象是否在二维空间中碰撞。这可以通过调整每个对象的边界矩形并检查矩形是否重叠来轻松完成。然后在您的 for 循环中,您可以相应地调整您的 Ball 矩形

关于math - 二维连续碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9627839/

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