У меня есть WinForm
приложение "Bouncing Balls", и мне нужно нарисовать мячи на bitmap
и представить растровое изображение в этой форме.
У меня есть plusButton
, который добавляет новый мяч, и я сохраняю каждый новый мяч в списке.
Теперь метод Form_Paint
говорит каждому шару рисовать себя, он работает нормально, пока шаров не станет много и все приложение станет очень медленным.
Вот мой код:
Метод рисования кода формы:
private void Form1_Paint(object sender, PaintEventArgs e)
{
ballsArray.drawImage(bmp,e, ClientRectangle);
}
ПРИМЕЧАНИЕ: ballsArray
относится к типу AllBalls
, это класс, который обертывает методы мяча, внутри его c'tor я создаю список, в котором хранится каждый мяч. bmp
создается при загрузке формы - по методу Form_Load()
.
DrawImage кода ballsArray
:
public void drawImage(Bitmap bmp,PaintEventArgs e, Rectangle r)
{
foreach (Ball b in allBalls)
{
b.drawImage(bmp,e, r);
}
}
drawImage
кода мяча:
public void drawImage(Bitmap bmp, PaintEventArgs e, Rectangle r)
{
using (Graphics g = Graphics.FromImage(bmp))
{
e.Graphics.FillEllipse(brush, ballLocation);
g.DrawImage(bmp, 0, 0);
}
}
ПРИМЕЧАНИЕ: ballLocation
– это прямоугольник, обозначающий положение мяча на каждом этапе движения.
Так что я делаю неправильно? Что заставляет приложение работать медленно?
У меня есть ограничение рисовать все на растровом изображении и представлять его в форме. Я также передаю растровое изображение, которое я создаю при загрузке формы, потому что мне нужно нарисовать каждое на нем.
Graphics
событияForm1_Paint
в методdrawImage
и нарисовав свой эллипс непосредственно на нем, вместо того, чтобы создавать новыйGraphics
для каждого шара. - person Rotem   schedule 13.01.2013Graphics
. - person Rotem   schedule 13.01.2013