C# 如何检查我的播放器是否为';不要与物体碰撞?
我正在完成XNA游戏中的另一项功能,但我想知道您应该如何检查并查看玩家是否停止与对象相交 目前,我有一个C# 如何检查我的播放器是否为';不要与物体碰撞?,c#,xna,collision,C#,Xna,Collision,我正在完成XNA游戏中的另一项功能,但我想知道您应该如何检查并查看玩家是否停止与对象相交 目前,我有一个bool,当玩家与小行星相交,即隐藏在小行星后面时,这是真实的。但我需要找出玩家何时停止与上述小行星相交,以允许bool返回false并允许我的敌人使用不同的移动路径 迄今为止的代码: Rectangle rectangle1; Rectangle rectangle2; rectangle1 = new Rectangle((int)player.Position.
bool
,当玩家与小行星相交,即隐藏在小行星后面时,这是真实的。但我需要找出玩家何时停止与上述小行星相交,以允许bool
返回false并允许我的敌人使用不同的移动路径
迄今为止的代码:
Rectangle rectangle1;
Rectangle rectangle2;
rectangle1 = new Rectangle((int)player.Position.X, (int)player.Position.Y, player.Width, player.Height);
for (int i = 0; i < asteroids.Count; i++)
{
rectangle2 = new Rectangle((int)asteroids[i].Position.X, (int)asteroids[i].Position.Y, asteroids[i].Width, asteroids[i].Height);
if (rectangle1.Intersects(rectangle2))
{
hidden = true;
}
}
矩形矩形1;
矩形2;
矩形1=新矩形((int)player.Position.X,(int)player.Position.Y,player.Width,player.Height);
对于(int i=0;i<小行星数;i++)
{
矩形2=新矩形((int)小行星[i]。位置.X,(int)小行星[i]。位置.Y,小行星[i]。宽度,小行星[i]。高度);
if(矩形1.相交(矩形2))
{
隐藏=真实;
}
}
我只是不知道如何检查其他状态。有什么想法吗?我想稍微改变一下这种方法 首先,不要每帧声明一个矩形。而是在创建星号和播放器时创建矩形。然后在每个相应的更新中,使用实体位置更新矩形的位置 因此,rectangle1现在是player.rectangle(我建议获取集合,但出于这个目的,这不是一个问题),而rectangle2是asteroid.rectangle 接下来,我将进行两个更改之一。如果您只关心检查是否发生了冲突,请在执行检查之前,在开始时将布尔值更改为false。如果没有发生冲突,该布尔值将保持为false,但如果执行了冲突,则该布尔值应更改为true,然后需要使用break关键字退出循环
// ensure rectangle's positions reflect the entity's position before checking.
hidden = false;
for (int i = 0; i < asteroids.Count; i++)
{
if (player.rectangle.Intersects(asteroids[i].rectangle))
{
hidden = true;
}
}
//检查前,确保矩形的位置反映实体的位置。
隐藏=错误;
对于(int i=0;i<小行星数;i++)
{
if(player.rectangle.Intersects(小行星[i].rectangle))
{
隐藏=真实;
}
}
或者,如果您需要检查多个碰撞,我将使用稍微不同的方法。如果发生碰撞,我会存储小行星的位置,以便稍后确定如何影响玩家移动。这将允许同时处理多个碰撞。出于其他原因,您可能仍然需要布尔值,所以我保留了它,但您可以检查列表中有多少个元素。我还要指出,为了更精确地处理碰撞,需要更多的数据,如质量、重力等,但这是一个完全不同的主题
// ensure rectangle's positions reflect the entity's position before checking.
List<Vector2> collisionPositions = new List<Vector2> positions;
hidden = false;
for (int i = 0; i < asteroids.Count; i++)
{
if (player.rectangle.Intersects(asteroids[i].rectangle))
{
hidden = true;
collisionPositions.add(asteroids[i].position);
}
}
//检查前,确保矩形的位置反映实体的位置。
列表冲突位置=新列表位置;
隐藏=错误;
对于(int i=0;i<小行星数;i++)
{
if(player.rectangle.Intersects(小行星[i].rectangle))
{
隐藏=真实;
添加(小行星[i].位置);
}
}