Monogame: Hjälp med breakout spel
Tja!
Jag håller på med ett breakout spel och försöker få ihop rörelserna när bollen och paddle träffar varandra. Vill alltså få rörelserna så likt det riktiga breakout spelet med någon typ av uträkning.
När man trycker på spacebar ska bollen gå rakt uppåt och sedan åt olika håll genom "Start = true" också.
En bug som jag har är att när bollen träffar höger/vänster sida om paddle, så går den igenom paddle och hastigheten ökas mycket. När väl hastigheten ändrats, så fortsätter bollen ha den nya hastigheten även om bollen ska starta från paddle igen när man dör, alltså när man trycker på spacebar.
Här är metoden med alla kollisioner och de flesta rörelser jag har i koden:
void BallPaddleCollisions()
{
//OM BOLLEN TRÄFFAR HÖGER/VÄNSTER KANT
if (ball_rect.X > Window.ClientBounds.Width - ball_texture.Width || ball_rect.X < 0)
ball_speed.X *= -1;
//OM BOLLEN TRÄFFAR ÖVRE KANT
if (ball_rect.Y > Window.ClientBounds.Height - ball_texture.Height || ball_rect.Y < 0)
ball_speed.Y *= -1;
//OM BOLLEN TRÄFFAR UNDRE KANT
if (ball_rect.Y > Window.ClientBounds.Height - ball_texture.Height)
{
lives -= 1;
Start = false;
StartValueBallPaddle();
}
//OM PADDLE TRÄFFAR HÖGER KANT, SÅ STANNAR DEN
if (paddle_rect.X > Window.ClientBounds.Width - paddle_rect.Width)
paddle_rect.X = (Window.ClientBounds.Width - paddle_rect.Width);
//OM PADDLE TRÄFFAR VÄNSTER KANT, SÅ STANNAR DEN
if (paddle_rect.X < 0)
paddle_rect.X = 0;
//OM BOLLEN TRÄFFAR PADDLE
if (paddle_rect.Intersects(ball_rect))
{
ball_speed.Y *= -1;
//FÖRHÅLLANDE OM MAN HÅLLER HÖGER/VÄNSTER ELLER INTE HÅLLER NÅGON HÖGER/VÄNSTER
if (holdingleft == true)
{
ball_speed.X -= 3;
}
else if (holdingright == true)
{
ball_speed.X += 3;
}
else if (resetballspeed == true)
{
ball_speed.X = 1;
}
}
holdingleft = false;
holdingright = false;
}
void KeyboardMouse()
{
if (ks.IsKeyDown(Keys.Left))
{
paddle_rect.X -= (int)paddle_speed.X;
holdingleft = true;
}
else if (ks.IsKeyDown(Keys.Right))
{
paddle_rect.X += (int)paddle_speed.X;
holdingright = true;
}
else if (ks.Equals(new KeyboardState()))
{
resetballspeed = true;
}
//BOLLEN RÖR SIG OM MAN KLICKAR SPACE
else if (ks.IsKeyDown(Keys.Space))
{
Start = true;
}
}
if (Start == true)
{
ball_rect.X += (int)ball_speed.X;
ball_rect.Y += (int)ball_speed.Y;
}