gpt4 book ai didi

c# - 二维边界框碰撞、墙壁

转载 作者:行者123 更新时间:2023-11-30 18:01:55 26 4
gpt4 key购买 nike

我目前在使用边界框使 sprite 显示为实体时遇到问题。碰撞与下面的代码一起工作得很好。

位置是主要角色在 map 上的位置。character2 是主角将与之发生碰撞的 18 x 28 Sprite 的名称。

当主要角色与 character2 Sprite 碰撞时,我尝试相应地调整位置(例如:Position.X -=1;)但这只会让我的主要角色向后滑动,直到它不相交。

我觉得这很简单,但对于我来说,我就是想不通。

总结一下我的问题:如何让 character2 Sprite 在碰撞时显示为实体?

此外,即使我的主要 Sprite 在碰撞时停止(通过将速度降低到 0),它也会卡在那里,if 语句进入无限循环。

        float x1 = Position.X;
float y1 = Position.Y;

float x2 = x1 + character2.Width;
float y2 = y1 + character2.Height;

BoundingBox b1 = new BoundingBox(new Vector3(x1, y1, 0),
new Vector3(x2, y2, 0));
BoundingBox b2 = new BoundingBox(new Vector3(Position2.X, Position2.Y, 0),
new Vector3(x2, y2, 0));


if (Collision(b1, b2))
{
// ????
}

最佳答案

这完全取决于你想要发生什么,但一个建议是这样的......

  if (HorizontalCollision(b1, b2))
{
xv = -xv;
}
else if (VerticalCollision(b1, b2))
{
yv = -yv;
}

Position2.X += xv;
Position2.Y += yv;

xvyv 在这种情况下将是速度变量,当分别发生水平或垂直碰撞时,您只需简单地反转它们的方向。这将导致对象或角色真正地相互弹开。

然后您可以添加 xv *= .99yv *= .99 以便在每次渲染循环后速度减慢,模拟动量和摩擦。当您使用这样的速度变量时,会出现许多不同的可能性。顺便说一句,这叫做Euler integration并且对于动画目的来说非常高效。

关于c# - 二维边界框碰撞、墙壁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8584466/

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