私はWinFormアプリケーション'バウンス ボール'bitmapを持っており、このフォームにボールをペイントし、ビットマップを提示する必要があります。
新しいボールを追加する があり、plusButton新しいボールをそれぞれリストに保存しています。
現在、Form_Paintメソッドは各ボールに自分自身を描画するように指示しています。多くのボールがあり、すべてのアプリケーションが非常に遅くなるまでは正常に機能します..
ここに私のコードがあります:
フォーム コードのペイント メソッド:
private void Form1_Paint(object sender, PaintEventArgs e)
{
ballsArray.drawImage(bmp,e, ClientRectangle);
}
注: ballsArray type からのものですAllBalls。これは、ボール メソッドをラップするクラスです。彼の c'tor 内で、各ボールを保持するリストを作成しています。はbmp、フォームのロード時に作成されます-onForm_Load()メソッド。
ballsArrayコードの drawImage :
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は、動きの各ステップでのボールの位置を表す四角形です.
それで、私は何を間違っていますか?アプリケーションが遅くなる原因は何ですか?
ビットマップにすべてを描画してフォームに表示するという制約があります。また、フォームの読み込み時に作成したビットマップも渡します。これは、それぞれを描画する必要があるためです。