2011-01-27 4 views
2

나는 아래 코드를 가지고있다. 폼이로드되면 볼이 만들어져 마우스와 함께 움직이지만 이제는 마우스 클릭으로 볼 (FilledEllipse)을 만든 다음 클릭 한 위치에 표시하려고합니다. 전반적인 목표는 화면 주위로 움직이기 시작하고 움직일 수 있도록하는 것입니다. 그래서 여러 것을 만들 수 있습니다. 나는 공의 반경을 설정 한 Ball 클래스를 사용하고 있습니다.winforms를 사용하여 C#에서 mouseclick에 공을 페인트하는 방법은 무엇입니까?

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에서는 새로 고침을 호출하여 목록을 새로 고칩니다.

나는 코드에 물건을 추가 : 당신이 그것을 페인트 전에

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 Forms를 대체하며 페인팅 및 애니메이션을위한 많은 솔루션을 포함합니다.

관련 문제