小娜:几个精灵的碰撞处理

本文关键字:精灵 碰撞 处理 几个 小娜 | 更新日期: 2023-09-27 17:50:45

我正在使用xna框架(monogame)创建一个小型教育类游戏。

我在屏幕上有许多精灵使用velocite独自移动。我想添加碰撞处理,这样当2个或更多精灵相交时,它们就会改变方向。但目前我还没解决!

这是每个精灵的更新方法:

 public void Update(GameTime gameTime)
    {
        if (CollisionDetected())
        {
            Xvelocity = -Xvelocity;
            Yvelocity = -Yvelocity;
        }
        position.X += Xvelocity;
        position.Y += Yvelocity;          
    }
 private bool CollisionDetected()
    {
        for (int i = 0; i < ListCount.Count(); i++)
        {
            if ((this.rectangle().Intersects(ListCount[i].rectangle()))
            {
                return true;
            }
        }
        return false;
    }

关于如何做到这一点的任何提示或想法将是伟大的

小娜:几个精灵的碰撞处理

看起来你在碰撞中所做的一切都是正确的(假设ListCount是所有精灵的列表);然而,我没有看到任何更新碰撞矩形的东西。你可以修改精灵的位置,但不能修改它们的碰撞矩形。我会尝试添加这个(这假设位置指的是左上角):

public void Update(GameTime gameTime)
{
    if (CollisionDetected())
    {
        Xvelocity = -Xvelocity;
        Yvelocity = -Yvelocity;
    }
    position.X += Xvelocity;
    position.Y += Yvelocity;     
    this.rectangle = new Rectangle(position.X, position.Y, rectangle.Width, rectangle.Height);     
}

这会导致矩形随着精灵移动,然后碰撞就会起作用。

注意,如果position指的是精灵的中心,那么使用如下:
this.rectangle = new Rectangle(position.X - rectangle.Width / 2,
   position.Y - rectangle.Height / 2, rectangle.Width, rectangle.Height);