我目前正在为 XNA 开发基于 C# 的平台游戏项目。
我的问题发生在角色离开平台时。他应该跌倒,但不会。我目前正在使用一系列布尔值;jumpBool、fallBool、groundBool 和一个静态布尔值,它使用矩形助手确定他是否在平台上。
判断他处于什么跳跃状态的代码如下。
if (onGround == true)
{
fallBool = false;
gravity = 0.0f;
jumpheight = -14.0f;
}
else
{
fallBool = true;
}
if (jumpBool == true)
{
gravity = 0.0f;
jumpheight += 1.0f;
Position.Y += jumpheight;
onGround = false;
}
if (jumpheight > 0)
{
jumpBool = false;
fallBool = true;
}
if (fallBool == true)
{
gravity = 1.0f;
}
这一切都有效,直到我尝试在他触摸平台时添加碰撞测试。
下面确定边界框以检查玩家是否在平台上方。
static class RectangleHelper
{
public static bool TouchTopOf(this Rectangle r1, Rectangle r2)
{
return (r1.Bottom >= r2.Top - 1 &&
r1.Bottom <= r2.Top + (r2.Height / 2) &&
r1.Right >= r2.Left + r2.Width / 5 &&
r1.Left <= r2.Right - r2.Width / 5);
}
public static bool TouchBottomOf(this Rectangle r1, Rectangle r2)
{
return (r1.Top <= r2.Bottom + (r2.Height / 5) &&
r1.Top >= r2.Bottom - 1 &&
r1.Right >= r2.Left + (r2.Width / 5) &&
r1.Left <= r2.Right - (r2.Width / 5));
}
public static bool TouchLeftOf(this Rectangle r1, Rectangle r2)
{
return (r1.Right <= r2.Right &&
r1.Right >= r2.Right - 5 &&
r1.Top <= r2.Bottom - (r2.Width / 4) &&
r1.Bottom >= r2.Top + (r2.Width / 4));
}
public static bool TouchRightOf(this Rectangle r1, Rectangle r2)
{
return (r1.Left <= r2.Left &&
r1.Left >= r2.Left - 5 &&
r1.Top <= r2.Bottom - (r2.Width / 4) &&
r1.Bottom >= r2.Top + (r2.Width / 4));
}
}
最后,这段代码检查他是否站在一个块上,并在他触摸平台时更改跳跃属性。
if (rectangle.TouchTopOf(newRectangle))
{
jumpheight = -14.0f;
onGround = true;
gravity = 0.0f;
fallBool = false;
}
但是,因为我使用 bool 来确定他是否在地面上,所以当他离开平台时,bool 仍然设置为 true,他不会摔倒。我想过尝试类似的东西
if else(!rectangle.TouchTopOf(newRectangle))
{
onGround = false;
}
但这会导致 onGround 由于某种原因总是错误的,他只是从平台上掉了下来。一旦他从平台上走下来,我怎么可能让他跌倒?
感谢您查看这篇文章并一直到这里。对此,我真的非常感激。