Я сделал клон краски и хочу очистить борд, когда вы встряхиваете форму (так, удерживая mouse1 на верхней панели и перемещая ее вправо и влево быстро). Я попытался сравнить две точки на оси х, точки устанавливаются на основе положения мыши и проверяются на соответствие порогу. И я добавил комбо, так что вам нужно преодолеть порог несколько раз, чтобы избежать случайной активации, чтобы помочь с этим, есть также таймер, который сбрасывает комбо. Проблема в том, что он видит быстрое движение в одну сторону как дрожь Я все еще хочу, чтобы пользователь мог перемещать форму без очистки холста.
int firstpos = 0;
int secondpos = 0;
bool isfirst = true;
int combo = 0;
int threshold = 50;
Point lastPoint;
private void TopBar_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)//to move the form
{
this.Left += e.X - lastPoint.X;
this.Top += e.Y - lastPoint.Y;
}
if (isfirst)
{
firstpos = e.X;
isfirst = false;
}
else
{
secondpos = e.X;
int diff = secondpos - firstpos;
if (diff < 0) diff *= -1;//make positive
if (diff >= threshold)
{
combo++;
Thread t = new Thread(startdecay);
t.Start();
}
if (combo == 4)
{
canvas.Invalidate();//clear the canvas
combo = 0;
}
isfirst = true;
}
}
void startdecay()
{
Thread.Sleep(1000);
combo = 0;
}
private void TopBar_MouseDown(object sender, MouseEventArgs e)
{
lastPoint = new Point(e.X, e.Y);
}
форма