初始化bool会干扰我的逻辑

本文关键字:我的 干扰 bool 初始化 | 更新日期: 2023-09-27 17:54:17

我正在研究这种处理碰撞检测的方法。我有一个问题,方向bool被初始化为真。有时,当触发一个对象时,角度会反过来,因为它期望bool值为假。

如果对象最初指向左边(在我的代码中介于0和350之间),bool值应该为真。如果它的目标是向右(在350和700之间),则bool值应为false。

我如何将初始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;
    }

初始化bool会干扰我的逻辑

在移动气泡之前必须检查它的位置。如果你把它放在移动结束的位置,你可能会超出屏幕的范围。

解释我的意思

我看到你在这里做的是:

  1. 寻找你的方向将要移动
  2. 移动气泡
  3. 检查气泡是否必须改变方向

在我看来,你要做的是

  1. 检查跟随方向
  2. 移动气泡

当你开始另一个移动时,你将检查气泡的方向

我想说你不应该使用布尔值,而应该使用enum:

 enum Direction
 {
     Unknown,
     Left,
     Right
 }

所以你可以初始化它为unknown并在你的代码中测试它