Я немного новичок в программировании и получил вопрос о том, что такое хорошая практика.
Я создал класс, который представляет шар, и у него есть функция Jump()
, которая использует 2 таймера и поднимает и опускает мяч.
Я знаю, что в Winforms вам нужно звонить Invalidate()
каждый раз, когда вы хотите перекрасить экран или его часть. Я не нашел хорошего способа сделать это, поэтому я ссылаюсь на форму в своем классе и звонил Invalidate()
в своем классе мяча каждый раз, когда мне нужно перекрасить в движение шара.
(это работает, но у меня сложилось впечатление, что это нехорошая практика)
Вот класс, который я создал:
public class Ball
{
public Form1 parent;//----> here is the reference to the form
public Rectangle ball;
Size size;
public Point p;
Timer timerBallGoUp = new Timer();
Timer timerBallGDown = new Timer();
public int ballY;
public Ball(Size _size, Point _p)
{
size = _size;
p = _p;
ball = new Rectangle(p, size);
}
public void Jump()
{
ballY = p.Y;
timerBallGDown.Elapsed += ballGoDown;
timerBallGDown.Interval = 50;
timerBallGoUp.Elapsed += ballGoUp;
timerBallGoUp.Interval = 50;
timerBallGoUp.Start();
}
private void ballGoUp(object obj,ElapsedEventArgs e)
{
p.Y++;
ball.Location = new Point(ball.Location.X, p.Y);
if (p.Y >= ballY + 50)
{
timerBallGoUp.Stop();
timerBallGDown.Start();
}
parent.Invalidate(); // here i call parent.Invalidate() 1
}
private void ballGoDown(object obj, ElapsedEventArgs e)
{
p.Y--;
ball.Location = new Point(ball.Location.X, p.Y);
if (p.Y <= ballY)
{
timerBallGDown.Stop();
timerBallGoUp.Start();
}
parent.Invalidate(); // here i call parent.Invalidate() 2
}
}
Мне интересно, есть ли лучший способ сделать это?
(простите за мой английский)