C# 二维边界框碰撞、墙
我目前无法使用边界框使精灵显示为实心。冲突与下面的代码配合得很好 位置是地图上的主要字符位置。 character2是主角色将与之碰撞的18 x 28精灵的名称 当主角色与character2精灵发生碰撞时,我尝试相应地调整位置(例如:position.X-=1;),但这只是将主精灵向后滑动,直到它不相交 我有一种感觉,这是一件非常简单的事情,但对我来说,我就是搞不懂 总结一下我的问题:如何使character2精灵在碰撞时显示为实心 而且,即使我的主精灵在碰撞时停止(通过将速度降低到0),它也会被卡住,if语句进入一个无休止的循环C# 二维边界框碰撞、墙,c#,xna,collision-detection,C#,Xna,Collision Detection,我目前无法使用边界框使精灵显示为实心。冲突与下面的代码配合得很好 位置是地图上的主要字符位置。 character2是主角色将与之碰撞的18 x 28精灵的名称 当主角色与character2精灵发生碰撞时,我尝试相应地调整位置(例如:position.X-=1;),但这只是将主精灵向后滑动,直到它不相交 我有一种感觉,这是一件非常简单的事情,但对我来说,我就是搞不懂 总结一下我的问题:如何使character2精灵在碰撞时显示为实心 而且,即使我的主精灵在碰撞时停止(通过将速度降低到0),它也
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;
在这种情况下,xv
和yv
将是速度变量,当发生水平或垂直碰撞时,您只是简单地反转它们的方向。这将导致对象或角色相互反弹
然后,您可以添加xv*=.99
和yv*=.99
,以便在每次渲染循环后降低速度,模拟动量和摩擦力。当你使用这样的速度变量时,会有很多不同的可能性。顺便说一句,这就是所谓的,而且对于动画来说非常有效
While(Collision(b1, b2))
{
Position.X -=1;
}
这就是你想要的吗P这只会冻结屏幕=X