2014-03-19 196 views
0

后,游戏开始时,球会完全使用此代码反弹的边缘:精灵熄灭屏幕碰撞

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 
      } 
+0

你有没有清除'Is_hit'标志? –

+0

嗨,谢谢!我忘了我需要重置它,我试图在我的碰撞检查之外重置它,并导致游戏行为相当怪异。如果没有碰撞,你将如何去重新设置它? – Bobby

+0

如果我不需要在其他任何地方检查它,我会在发布的代码的第一个块中清除它,其中包含评论'// collision here' –

回答

0

看起来你忘了清除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; 
}