精灵在碰撞后离开屏幕

本文关键字:离开 屏幕 碰撞 精灵 | 更新日期: 2023-09-27 17:51:05

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

    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;
  }

}

但是一旦发生碰撞,球将成功地反弹到另一个精灵(玩家划桨)上,但随后程序似乎忽略了这段代码,球将直接离开屏幕。

碰撞代码:

  // paddle collison detection 
            if   
   (  gameball.PositionRectangle_ball.Intersects(paddle.PositionRectangle_paddle))
            {
     collision_paddle = true; 
                gameball.CheckCollision(collision_paddle); // passes the collision bool value 
            }

精灵在碰撞后离开屏幕

您好像忘记清除Is_hit标志了。

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

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