C# 二维边界框碰撞、墙

C# 二维边界框碰撞、墙,c#,xna,collision-detection,C#,Xna,Collision Detection,我目前无法使用边界框使精灵显示为实心。冲突与下面的代码配合得很好 位置是地图上的主要字符位置。 character2是主角色将与之碰撞的18 x 28精灵的名称 当主角色与character2精灵发生碰撞时,我尝试相应地调整位置(例如:position.X-=1;),但这只是将主精灵向后滑动,直到它不相交 我有一种感觉,这是一件非常简单的事情,但对我来说,我就是搞不懂 总结一下我的问题:如何使character2精灵在碰撞时显示为实心 而且,即使我的主精灵在碰撞时停止(通过将速度降低到0),它也

我目前无法使用边界框使精灵显示为实心。冲突与下面的代码配合得很好

位置是地图上的主要字符位置。 character2是主角色将与之碰撞的18 x 28精灵的名称

当主角色与character2精灵发生碰撞时,我尝试相应地调整位置(例如:position.X-=1;),但这只是将主精灵向后滑动,直到它不相交

我有一种感觉,这是一件非常简单的事情,但对我来说,我就是搞不懂

总结一下我的问题:如何使character2精灵在碰撞时显示为实心

而且,即使我的主精灵在碰撞时停止(通过将速度降低到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;
在这种情况下,
xv
yv
将是速度变量,当发生水平或垂直碰撞时,您只是简单地反转它们的方向。这将导致对象或角色相互反弹

然后,您可以添加
xv*=.99
yv*=.99
,以便在每次渲染循环后降低速度,模拟动量和摩擦力。当你使用这样的速度变量时,会有很多不同的可能性。顺便说一句,这就是所谓的,而且对于动画来说非常有效

While(Collision(b1, b2))
{
    Position.X -=1;
}

这就是你想要的吗P

这只会冻结屏幕=X