2011-01-27 12 views
2

私は現時点で以下のコードを持っています。フォームがロードされると、ボールが作成され、マウスで動くようになりましたが、マウスの上にボール(FilledEllipse)を作成し、クリックした場所に表示させたいと考えています。全体的な目標は、画面の周りを移動して跳ね返り、複数のものを作成できるようにすることですが、まず最初に最初のものを作成します。私はボールの半径を設定するだけで作成したBallクラスを使用しています。winformsを使用してC#のマウスクリックでボールをペイントするにはどうすればよいですか?

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     this.Paint += Form1_Paint; 
     this.MouseMove += Form1_MouseMove; 
     this.MouseClick += Form1_MouseClick; 
    } 

    private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     Point local = this.PointToClient(Cursor.Position); 
     e.Graphics.FillEllipse(Brushes.Red, local.X , local.Y , 20, 20); 
    } 

    private void Form1_MouseMove(object sender, MouseEventArgs e) 
    { 
     Invalidate(); 
    } 

    private void Form1_MouseClick(object sender, MouseEventArgs e) 
    { 
     Random random = new Random(); 
     Ball myBall = new Ball(random.Next(1, 5)); 
    }  

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 
} 
+0

C#でゲームをする場合は、XNAをお勧めします。 –

答えて

3

List<Ball>を作成し、mouseclickで作成したボールをこのリストに追加します。

OnPaintで、リスト内のすべてのボールをペイントします。

また、OnClickでは、リストを更新するためにRefreshを呼び出します。

私はあなたのコードにものを追加しました:

public partial class Form1 : Form 
{ 
    // Create list 
    List<Ball> _balls = new List<Ball>(); 

    public Form1() 
    { 
     InitializeComponent(); 
     this.Paint += Form1_Paint; 
     this.MouseMove += Form1_MouseMove; 
     this.MouseClick += Form1_MouseClick; 
    } 

    private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     Point local = this.PointToClient(Cursor.Position); 
     e.Graphics.FillEllipse(Brushes.Red, local.X , local.Y , 20, 20); 

     // Paint each stored ball 
     foreach(var ball in _balls) { 
      // paint ball 
     } 
    } 

    private void Form1_MouseMove(object sender, MouseEventArgs e) 
    { 
     Invalidate(); 
    } 

    private void Form1_MouseClick(object sender, MouseEventArgs e) 
    { 
     Random random = new Random(); 
     Ball myBall = new Ball(random.Next(1, 5)); 

     // Store ball, and refresh screen 
     _balls.Add(myBall); 
     Invalidate() 
    }  

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 
} 

をボールを移動するには、のOnPaintであなたはそれをペイントする前に、(各ボールの)新しい位置を計算します。

最後のOnPaintからの時間を考慮して、柔軟な動きを作成します。

また、WPFを見てみることをお勧めします。このライブラリはWindowsフォームを置き換えるもので、ペイントやアニメーションのための多くのソリューションが含まれています。

関連する問題