我正在使用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;
}
关于如何做到这一点的任何提示或想法都会很棒
答案 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);