我是一个正在从事个人项目的初学者。我设法使用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;
}
答案 0 :(得分:1)
您需要保留图片框(x,y)
位置的历史记录,以便在每个Paint
事件中使用它们进行绘制。
重新绘制窗体时,它将使用背景色清除工作区(窗口)并绘制控件。另外,您可以插入Form.Paint
事件并在绘制控件之前进行其他绘制。
对于您的解决方案,我建议您有一个Queue<Point>
对象,可以在每次移动后添加位置,并在列表达到一定限制后删除旧位置。
在绘图方面,请先阅读Microsoft Documentation的工作原理。