Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 初始化bool会干扰我的逻辑_C#_.net_Visual Studio_Xna - Fatal编程技术网

C# 初始化bool会干扰我的逻辑

C# 初始化bool会干扰我的逻辑,c#,.net,visual-studio,xna,C#,.net,Visual Studio,Xna,我正在研究这个处理碰撞检测的方法。我对方向bool初始化为true有问题。有时,当发射一个物体时,角度是反向的,因为它期望目标是假的 如果对象最初指向左侧(在我的代码中介于0和350之间),bool应该为true。如果目标指向右侧(350到700之间),则布尔值应为假 如何将初始bool设置为适当的真/假值而不干扰后续碰撞检测 我认为问题在于,当我试图检查方向应该是什么,然后设置方向时,我无意中对对象施加了约束。我不知道如何把这两者分开。理想情况下,介于0和350之间的检查以及介于350和700

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

如果对象最初指向左侧(在我的代码中介于0和350之间),bool应该为true。如果目标指向右侧(350到700之间),则布尔值应为假

如何将初始bool设置为适当的真/假值而不干扰后续碰撞检测


我认为问题在于,当我试图检查方向应该是什么,然后设置方向时,我无意中对对象施加了约束。我不知道如何把这两者分开。理想情况下,介于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;
        }
    }    
//移动气泡
公共空隙移动气泡(气泡,矢量2距离)
{
if(bubble.stop==false)
{
velocityX=速度*距离.X;
velocityY=速度*距离.Y;
气泡X+=速度X;
//问题部分
if(bubble.Y>0&&bubble.Y<350)
方向=真;
如果(气泡Y>350和气泡Y<700)
方向=假;
//结束问题部分
如果(方向==真)
气泡Y+=velocityY;
如果(方向==假)
气泡Y-=速度Y;
如果(气泡Y=350)
方向=!方向;
}
}    
固定代码:

    //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距离)
{
if(bubble.stopped==false)
if(气泡.Y<0 | |气泡.Y>350)
bubble.velocityY=-bubble.velocityY;
bubble.Y+=bubble.velocityY;
bubble.X+=bubble.velocityX;
}

我认为您不应该使用布尔值,而应该使用枚举:

 enum Direction
 {
     Unknown,
     Left,
     Right
 }

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

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

解释我的意思

我看到你在这里做的是:

  • 寻找你的方向 要搬家吗
  • 移动泡沫
  • 检查泡沫是否必须改变 方向
  • 依我看,你要做的是

  • 检查要遵循的方向
  • 移动泡沫

  • 当您开始另一个移动时,您将检查气泡必须采取的方向

    当前如何初始化
    方向
    ?如果对象最初指向左侧(在我的代码中介于0和225之间),则布尔值应为真。-你为什么不这样做呢?在它被“激发”之前初始化
    direction
    ?有一个二维的“距离”是没有意义的-如果我看到一个方法包含一个气泡和一个向量,我会假设该方法通过该向量偏移/移动气泡。Heinzi,direction从初始化开始就被设置为true。我从上面的代码中删除了设置失败的尝试。格罗,当我创建那些if语句时,它会进一步扰乱代码,我的对象不是在墙上来回弹跳,而是在向上移动时粘在墙上。物理对象的方向怎么可能是未知的?安德斯是对的。不会有我在处理未知事件的情况。我只是不明白如何只检查一次左侧或右侧,而不是每次移动对象时。我认为问题在于,当我尝试检查方向时,我无意中对对象施加了约束。我不知道如何把这两者分开。理想情况下,0和350之间的检查以及350和700之间的检查应该只发生一次,但每次调用该方法时都会对它们进行检查,这导致了问题。必须删除最后一个条件才能更改距离,因此在此步骤中计算气泡必须遵循的反方向。就像“让我们看看你现在要去哪里”,这就是我指的。对不起,我不明白你在这里的意思。看看我编辑的:P