在C#WinForm项目中移动图片框时如何绘制轨迹

时间:2019-11-26 14:48:01

标签: c# winforms

我是一个正在从事个人项目的初学者。我设法使用W,A,S,D键移动图片框。接下来我要做的是让我的图片框在其移动的任何地方留下一条痕迹,并在其经过它们时擦除痕迹(有点像pacman)

路径可以是直线或一堆点。我尝试通过绘制新的矩形作为路径,但无法正常工作。就像我说的,我是初学者:)

这是我到目前为止所拥有的:

private void Form1_KeyDown(object sender, KeyEventArgs e, PaintEventArgs a)
{
    int x = pictureBox1.Location.X;
    int y = pictureBox1.Location.Y;

    if (e.KeyCode == Keys.W) y -= speed;
    else if (e.KeyCode == Keys.A) x -= speed;
    else if (e.KeyCode == Keys.D) x += speed;
    else if (e.KeyCode == Keys.S) y += speed;

    Collision(new Rectangle(x, y, pictureBox1.Width, pictureBox1.Height), pictureBox2);
    Collision(new Rectangle(x, y, pictureBox1.Width, pictureBox1.Height), pictureBox3);


    if (movement == true)
    {
        pictureBox1.Location = new Point(x, y);
    }
}

private void Collision(Rectangle rect, PictureBox b)
{
    if (rect.IntersectsWith(b.Bounds))
    {
        movement = false;
    }
}

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    movement = true;
}

1 个答案:

答案 0 :(得分:1)

您需要保留图片框(x,y)位置的历史记录,以便在每个Paint事件中使用它们进行绘制。

重新绘制窗体时,它将使用背景色清除工作区(窗口)并绘制控件。另外,您可以插入Form.Paint事件并在绘制控件之前进行其他绘制。

对于您的解决方案,我建议您有一个Queue<Point>对象,可以在每次移动后添加位置,并在列表达到一定限制后删除旧位置。

在绘图方面,请先阅读Microsoft Documentation的工作原理。