初始化bool会干扰我的逻辑

时间:2011-05-03 11:55:22

标签: c# .net visual-studio xna

我正在研究这种处理碰撞检测的方法。我有一个方向bool被初始化为true的问题。有时,当射击一个物体时,角度是相反的,因为它期望bool是假的。

如果对象最初瞄准左侧(在我的代码中介于0和350之间),则bool应为true。如果它是针对右边(350到700之间),那么bool应该是假的。

如何在不干扰后续碰撞检测的情况下将初始bool设置为适当的true / false值?

我认为问题是当我尝试检查方向应该是什么时,然后设置它,我无意中对对象施加约束。我无法弄清楚如何将两者分开。理想情况下,0到350之间的检查以及350到700之间的检查应该只发生一次,但是每次调用方法时都会检查它们,这会导致问题。

//Move bubble
    public void MoveBubble(Bubble bubble, Vector2 distance)
    {
        if (bubble.stop == false)
        {
            velocityX = speed * distance.X;
            velocityY = speed * distance.Y;

            bubble.X += velocityX;

            //Problem section
            if (bubble.Y > 0 && bubble.Y < 350)
                direction = true;

            if (bubble.Y > 350 && bubble.Y < 700)
                direction = false;
            //End Problem section

            if (direction == true)
                bubble.Y += velocityY;

            if (direction == false)
                bubble.Y -= velocityY;

            if (bubble.Y <= 0 || bubble.Y >= 350)
                direction = !direction;
        }
    }    

固定代码:

    //Move bubble and reverse it's velocity if it collides with a wall
    internal void MoveBubble(Bubble bubble, Vector2 distance)
    {
        if (bubble.stopped == false)
            if (bubble.Y < 0 || bubble.Y > 350)
                bubble.velocityY = -bubble.velocityY;

            bubble.Y += bubble.velocityY;
            bubble.X += bubble.velocityX;
    }

2 个答案:

答案 0 :(得分:1)

我会说你不应该使用布尔值,而应该使用枚举:

 enum Direction
 {
     Unknown,
     Left,
     Right
 }

因此,您可以将其初始化为未知并在代码中对其进行测试。

答案 1 :(得分:1)

在移动气泡之前,您必须检查气泡的位置。在移动结束时你拥有它的位置,你可能超出了屏幕的范围。

解释我的意思

我看到你在这里做的是:

  1. 寻找你的方向 要搬家了
  2. 移动气泡
  3. 检查泡沫是否必须改变 方向
  4. 在mi意见中,你要做的是

    1. 检查要遵循的方向
    2. 移动气泡
    3. 当你开始另一个动作时,你将检查气泡必须采取的方向