私は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
は、動きの各ステップでのボールの位置を表す四角形です.
それで、私は何を間違っていますか?アプリケーションが遅くなる原因は何ですか?
ビットマップにすべてを描画してフォームに表示するという制約があります。また、フォームの読み込み時に作成したビットマップも渡します。これは、それぞれを描画する必要があるためです。