2

所以我试图做到这一点;如果敌人左侧位置大于平台右侧,则敌人转向另一侧,反之亦然。现在的问题是游戏突然不能识别了。这个敌人同时在空中跳跃,所以我让它只检查 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;
                }
            }
4

0 回答 0