2017-10-20 4 views
-2

Je travaille sur un programme de balle rebondissante et c'est presque fini. Mon seul problème est que je ne sais pas comment obtenir le numéro que l'utilisateur a choisi dans NumericUpDown et l'utiliser comme un incrément de coordonnées. Cela rend la balle plus rapide, plus lente, ou si elle est définie sur un nombre négatif, ce qui la fait démarrer dans la direction opposée. Ceci est mon code:Comment puis-je obtenir la valeur NumericUpDown pour modifier la vitesse de déplacement de PictureBox?

}

private void NumericUpDownVx_ValueChanged(object sender, EventArgs e) 
    { 

    } 

    private void NumericUpDownVy_ValueChanged(object sender, EventArgs e) 
    { 

    } 

    private void ButtonStart_Click(object sender, EventArgs e) 
    { 


     if (buttonStart.Text == "Start") 

     { 
      numericUpDownVx.Enabled = false; 
      numericUpDownVy.Enabled = false; 

      buttonStart.Text = "Stop"; 

      Timer1.Start(); 

     } 


     else if (buttonStart.Text == "Stop") 
     { 
      numericUpDownVx.Enabled = true; 
      numericUpDownVy.Enabled = true; 
      buttonStart.Text = "Start"; 
      Timer1.Stop(); 
      Timer2.Stop(); 
      Timer3.Stop(); 
      Timer4.Stop(); 
     } 
    } 

    private void Timer1_Tick(object sender, EventArgs e) 
    { 
     ball.Top += 5; 
     ball.Left += 5; 

     if (ball.Left + ball.Width > Mesa.Width) 
     { 
      Timer1.Stop(); 
      Timer2.Start(); 
     } 

     if (ball.Top + ball.Height > Mesa.Height) 
     { 
      Timer1.Stop(); 
      Timer3.Start(); 
     } 
    } 

    private void Timer2_Tick(object sender, EventArgs e) 
    { 
     ball.Top += 5; 
     ball.Left -= 5; 

     if (ball.Top + ball.Height > Mesa.Height) 
     { 
      Timer2.Stop(); 
      Timer4.Start(); 
     } 

     if (ball.Left < 0) 
     { 
      Timer2.Stop(); 
      Timer1.Start(); 
     } 
    } 

    private void Timer3_Tick(object sender, EventArgs e) 
    { 
     ball.Top -= 5; 
     ball.Left += 5; 

     if (ball.Left + ball.Width > Mesa.Width) 
     { 
      Timer3.Stop(); 
      Timer4.Start(); 
     } 

     if (ball.Top < 0) 
     { 
      Timer3.Stop(); 
      Timer1.Start(); 
     } 
    } 

    private void Timer4_Tick(object sender, EventArgs e) 
    { 
     ball.Top -= 5; 
     ball.Left -= 5; 

     if (ball.Left < 0) 
     { 
      Timer4.Stop(); 
      Timer3.Start(); 
     } 

     if (ball.Top < 0) 
     { 
      Timer4.Stop(); 
      Timer2.Start(); 
     } 
    } 

La valeur NumericUpDown va de -5 à 5 et j'ai besoin pour remplacer les valeurs ball.Top et ball.Left pour permettre à l'utilisateur de changer la vitesse de le ballon. Merci pour l'attention.

Répondre

0

Vous pouvez déclarer des variables globales pour enregistrer des valeurs x et y. les x =ball.Top et on crée un y = ball.Left en cas de charge de forme

decimal x=0; 
decimal y =0; 

private void NumericUpDownVx_ValueChanged(object sender, EventArgs e) 
{ 
    x = NumericUpDownVx.Value; 
} 

private void NumericUpDownVy_ValueChanged(object sender, EventArgs e) 
{ 
     y = NumericUpDownVy.Value; 
} 

private void ButtonStart_Click(object sender, EventArgs e) 
{ 


    if (buttonStart.Text == "Start") 

    { 
     numericUpDownVx.Enabled = false; 
     numericUpDownVy.Enabled = false; 

     buttonStart.Text = "Stop"; 

     Timer1.Start(); 

    } 


    else if (buttonStart.Text == "Stop") 
    { 
     numericUpDownVx.Enabled = true; 
     numericUpDownVy.Enabled = true; 
     buttonStart.Text = "Start"; 
     Timer1.Stop(); 
     Timer2.Stop(); 
     Timer3.Stop(); 
     Timer4.Stop(); 
    } 
} 

private void Timer1_Tick(object sender, EventArgs e) 
{ 
    ball.Top = Convert.ToInt32(x + 5); 
    ball.Left = Convert.ToInt32(y + 5); 

    if (ball.Left + ball.Width > Mesa.Width) 
    { 
     Timer1.Stop(); 
     Timer2.Start(); 
    } 

    if (ball.Top + ball.Height > Mesa.Height) 
    { 
     Timer1.Stop(); 
     Timer3.Start(); 
    } 
} 

Faites la même chose pour tous les événements de tiques.

+0

J'ai 1 erreur. Au bal.Top = x + 5; et balle.Gauche = y + 5; il est dit "Impossible de convertir implicitement le type 'decimal' en 'int' Une conversion explicite existe". Comment puis-je résoudre celui-ci? –

+0

Réponse mise à jour. Essayez maintenant. –

+0

Je viens de réaliser que mettre x et y à la balle.Top et la balle.Gauche raté avec tous les Timers parce que j'ai utilisé la commande ball.Left + = 5; et balle.Top + = 5; c'est la même chose que ball.Location = new Point (ball.Location.X +5, ball.Location.Y +5); –