我有一个WinForm
应用程序'Bouncing Balls',我需要在 a 上绘制球bitmap
并在此表单上显示位图。
我有一个plusButton
添加新球的,我将每个新球保存在一个列表中。
现在,该Form_Paint
方法告诉每个球自己画,它工作正常,直到有很多球并且所有应用程序变得非常慢..
这是我的代码:
表单代码的paint方法:
private void Form1_Paint(object sender, PaintEventArgs e)
{
ballsArray.drawImage(bmp,e, ClientRectangle);
}
注意: ballsArray
来自 type AllBalls
,这是一个包装球方法的类,在他的 c'tor 中,我正在创建一个保存每个球的列表。,bmp
是在表单加载时创建的 - onForm_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
是一个矩形,表示每一步运动中球的位置。
那么我做错了什么?是什么导致应用程序缓慢?
我有一个约束要在位图上绘制所有内容并将其呈现在表单上。我还传递了加载表单时创建的位图,因为我需要在其上绘制每个位图。