我的方法有问题,我的球在突破游戏中运动以及球和桨之间的碰撞。 我也有一个错误,当球击中桨的左侧或右侧时。这个错误就是这样,球投掷了桨,之后速度变得更快。
所以我要求你提供另一个关于球运动的解决方案,这样它就会更加灵活,而且很像真正的突破游戏:)
void BallPaddleCollisions()
{
//IF BALL HITS LEFT/RIGHT SIDE
if (ball_rect.X > Window.ClientBounds.Width - ball_texture.Width || ball_rect.X < 0)
ball_speed.X *= -1;
//IF BALL HITS THE ROOF
if (ball_rect.Y > Window.ClientBounds.Height - ball_texture.Height || ball_rect.Y < 0)
ball_speed.Y *= -1;
//IF BALL HITS THE BOTTOM
if (ball_rect.Y > Window.ClientBounds.Height - ball_texture.Height)
{
//NEW VALUES TO BALL AND PADDLE
ball_rect.X = (Window.ClientBounds.Width - ball_texture.Width) / 2;
ball_rect.Y = 556;
paddle_rect.X = (Window.ClientBounds.Width - paddle_texture.Width) / 2;
paddle_rect.Y = 580;
}
//IF PADDLE HITS RIGHT SIDE, STOPS
if (paddle_rect.X > Window.ClientBounds.Width - paddle_rect.Width)
paddle_rect.X = (Window.ClientBounds.Width - paddle_rect.Width);
//IF PADDLE HITS LEFT SIDE, STOPS
if (paddle_rect.X < 0)
paddle_rect.X = 0;
//IF BALL HIT PADDLE
if (paddle_rect.Intersects(ball_rect))
{
ball_speed.Y *= -1;
//WHEN YOU HOLD LEFT KEY
if (holdingleft == true)
{
ball_speed.X -= 3;
}
//WHEN YOU HOLD RIGHT KEY
else if (holdingright == true)
{
ball_speed.X += 3;
}
//IF YOU ARE NOT HOLDING ANY KEY AND STANDING STILL WITH PADDLE
else if (resetballspeed == true)
{
ball_speed.X = 1;
}
}
}
else if (ks.IsKeyDown(Keys.Space))
{
Start = true;
}
//IF YOU HIT SPACEBAR THIS WILL START
if (Start == true)
{
ball_rect.X += (int)ball_speed.X;
ball_rect.Y += (int)ball_speed.Y;
}