xna:几个sprite碰撞处理

时间:2014-03-18 15:07:27

标签: c# xna collision-detection monogame

我正在使用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;
    }

关于如何做到这一点的任何提示或想法都会很棒

1 个答案:

答案 0 :(得分:2)

看起来你正确地在碰撞中做了一切(假设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);