Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用winforms在C#中的鼠标点击上绘制球?_C#_Winforms - Fatal编程技术网

如何使用winforms在C#中的鼠标点击上绘制球?

如何使用winforms在C#中的鼠标点击上绘制球?,c#,winforms,C#,Winforms,我现在有下面的代码。当窗体加载时,将创建一个球并用鼠标移动,但现在我想在鼠标单击上创建一个球(FilledEllipse),然后将其显示在单击的位置。总体目标是让它开始在屏幕上移动和反弹,这样我可以创建多个,但首先要做的是。我正在使用我创建的一个Ball类,它只设置球的半径 public partial class Form1 : Form { public Form1() { InitializeComponent(); this.Pain

我现在有下面的代码。当窗体加载时,将创建一个球并用鼠标移动,但现在我想在鼠标单击上创建一个球(FilledEllipse),然后将其显示在单击的位置。总体目标是让它开始在屏幕上移动和反弹,这样我可以创建多个,但首先要做的是。我正在使用我创建的一个Ball类,它只设置球的半径

   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)
    {

    }
}
创建一个
列表
并将鼠标单击时创建的球添加到此列表

在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)
    {

    }
}
公共部分类表单1:表单
{
//创建列表
列表_balls=新列表();
公共表格1()
{
初始化组件();
此.Paint+=Form1_Paint;
this.MouseMove+=Form1\u MouseMove;
this.MouseClick+=Form1\u MouseClick;
}
私有void Form1_Paint(对象发送器、PaintEventArgs e)
{
Point local=此.PointToClient(游标位置);
e、 图形。填充椭圆(画笔。红色,局部。X,局部。Y,20,20);
//为每个储存的球上漆
foreach(var ball in_balls){
//油漆球
}
}
私有void Form1\u MouseMove(对象发送方,MouseEventArgs e)
{
使无效();
}
private void Form1\u鼠标单击(对象发送方,鼠标目标e)
{
随机=新随机();
Ball myBall=新球(随机。下一个(1,5));
//存储球,并刷新屏幕
_添加(myBall);
使无效
}      
私有void Form1\u加载(对象发送方、事件参数e)
{
}
}
要移动球,请在“OnPaint”中,在绘制前计算(每个球的)新位置

考虑自上次绘制以来的时间,以创建灵活的运动


我也可以建议你看看WPF。此库是Windows窗体的替代品,包含许多用于绘画和动画的解决方案。

如果您想用C制作游戏,我建议您看看XNA。