C# 碰撞后精灵离开屏幕

C# 碰撞后精灵离开屏幕,c#,xna,collision-detection,C#,Xna,Collision Detection,当游戏开始时,球将使用以下代码从边缘完美反弹: if (Is_hit == true && ballFired == true ) { //collision here ballXPos = 960 - ballimg.Width - (ballXPos - 960 + ballimg.Width); ballXDir = +1; ballYDir = -1; } if (Ball

当游戏开始时,球将使用以下代码从边缘完美反弹:

    if (Is_hit == true && ballFired == true )
    {
        //collision here
        ballXPos = 960 - ballimg.Width - (ballXPos - 960 + ballimg.Width);
        ballXDir = +1;

        ballYDir = -1;
    }

    if (Ballvisible == true)
    {


        if (Keyboard.GetState().IsKeyDown(Keys.Space) && ballFired == false)
        {
            ballFired = true;

        }
        if (ballFired == true)
        {


            ballXPos = ballXPos - (ballSpeed * ballXDir);

            ballYPos = ballYPos + (ballSpeed * ballYDir);

        }
        if (ballXPos < 0)
        {
            ballXPos = -ballXPos;
            ballXDir = -1;


        }
        if (ballXPos > 960 - ballimg.Width)
        {
            ballXPos = 960 - ballimg.Width - (ballXPos - 960 + ballimg.Width);
            ballXDir = +1;


        }
        if (ballYPos < 0)
        {
            ballYPos = +ballYPos;
            ballYDir = +1;

        }
      if (ballYPos > 700 - ballimg.Height)
      {
          Ballvisible = false;
      }


  }
  if (Ballvisible == false)
  {

      ballSpeed = 3;
      ballXDir = -1;
      ballYDir = -1;

      ballXPos = 450;
      ballYPos = 590;
      ballFired = false;
      Ballvisible = true;
  }



}

看起来你忘了清除Is_命中标志

如果您不需要在其他任何地方检查它,您可以在发布代码的第一块中清除它:

if (Is_hit == true && ballFired == true )
{
    //collision here
    ballXPos = 960 - ballimg.Width - (ballXPos - 960 + ballimg.Width);
    ballXDir = +1;

    ballYDir = -1;
    Is_hit = false;
}

你有没有清除过hit标志?嗨,谢谢你!我忘了我需要重置它,我尝试在碰撞检查之外重置它,这导致游戏表现得相当怪异。如果没有冲突,您将如何重置它?如果我不需要在其他任何地方检查它,我将在发布代码的第一个块中清除它,该块带有注释//冲突,谢谢!这很有效。非常感谢你的帮助。如果你把它作为一个答案张贴,我会标记为正确
if (Is_hit == true && ballFired == true )
{
    //collision here
    ballXPos = 960 - ballimg.Width - (ballXPos - 960 + ballimg.Width);
    ballXDir = +1;

    ballYDir = -1;
    Is_hit = false;
}