所以我试图做到这一点;如果敌人左侧位置大于平台右侧,则敌人转向另一侧,反之亦然。现在的问题是游戏突然不能识别了。这个敌人同时在空中跳跃,所以我让它只检查 X 值。(矩形的左右两侧)
这是代码:
这些检查它是否在平台内......
static class RectangleHelper
{
public static bool isInsideOf(this Rectangle r1, Rectangle r2)
{
return (r1.Right >= r2.Left &&
r1.Left <= r2.Right);
}
}
if (!chompBall.rectangle.isInsideOf(platform.rectangle))
{
if (chompBall.movingRight == true && chompBall.canChangeDirection == true)
chompBall.movingRight = false;
else if (chompBall.movingRight == false && chompBall.canChangeDirection == true)
chompBall.movingRight = true;
chompBall.canChangeDirection = false;
}
我试图改变很多东西,甚至删除了 ! 看看它是否有效,但没有。我不知道!有趣的是它总是在接触地面(我的其他敌人)时起作用,但现在只有 X 坐标很重要,它不重要。
请帮忙!
-编辑:
拆分逻辑?这是否意味着这样做?:
if (!chompBall.rectangle.isInsideOf(platform.rectangle) && chompBall.movingRight == true)
chompBall.movingRight = false;
else if (!chompBall.rectangle.isInsideOf(platform.rectangle) && chompBall.movingRight == false)
chompBall.movingRight = true;
-编辑2:哦,我想我知道你的意思。我在 RectangleHelper 上检查它是否在右边,反之亦然。它仍然不起作用,结果是一样的:
if (chompBall.rectangle.isRightOf(platform.rectangle) && chompBall.movingRight == true)
chompBall.movingRight = false;
else if (chompBall.rectangle.isLeftOf(platform.rectangle) && chompBall.movingRight == false)
chompBall.movingRight = true;
编辑 3,敌人移动。如您所见,这里使用了“canChangeDirection bool。它的ment to do;当敌人到达平台的尽头时,它会转弯并且直到100ms才能再次转弯。使用它是为了它不会卡在角落:
if (movingRight == true)
{
position.X += 2;
rotation += 0.05f;
}
else if (movingRight == false)
{
position.X -= 2;
rotation -= 0.05f;
}
if (canChangeDirection == false)
{
timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
if (timer >= 100)
{
canChangeDirection = true;
timer = 0;
}
}