游戏无法识别平台矩形内的敌方矩形

时间:2013-09-04 17:10:02

标签: c# xna

所以我试着这样做;如果敌人左侧位置超过平台右侧,则敌人转向另一侧,反之亦然。现在的问题是游戏突然无法识别它。这个敌人同时在空中跳跃,所以我只检查了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;  

-Edit 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。这是做的;当敌人到达平台的末端时,它会转动,直到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;
                }
            }

0 个答案:

没有答案