C# 如何让我的线路在winforms上正常跳转

C# 如何让我的线路在winforms上正常跳转,c#,winforms,C#,Winforms,我一直在尝试用C#创建一个winforms程序来演示Mystify屏幕保护程序,这是我无法让程序流畅运行的原因之一。我不知道我的计算结果是否正确,但请给我一个提示。线条一直随机出现在表单上,而不是随着阴影或尾巴流动 private bool playButton = false; private int xP1 = 10; private int yP1 = 10; private int xP2 = 100; private int yP2 = 50;

我一直在尝试用C#创建一个winforms程序来演示Mystify屏幕保护程序,这是我无法让程序流畅运行的原因之一。我不知道我的计算结果是否正确,但请给我一个提示。线条一直随机出现在表单上,而不是随着阴影或尾巴流动

 private bool playButton = false;

    private int xP1 = 10;
    private int yP1 = 10;
    private int xP2 = 100;
    private int yP2 = 50;
    private int xSpeed = 0;
    private int ySpeed = 0;
    private int windowHeight = 400;
    private int windowWidth = 600;
    private int xSpeedChange = 2;
    private int ySpeedChange = 2;
    private Random rand = new Random();

    public SETMystify()
    {
        InitializeComponent();
    }

    private void toolStripButton1_Click(object sender, EventArgs e)
    {
        playButton = true;
    }

    private void canvas_Paint(object sender, PaintEventArgs e)
    {
        Graphics paintLine = e.Graphics;
        Pen penColor = new Pen(Color.Red, 3);
        if (playButton == true)
        {


            xP1 = rand.Next(0, windowHeight);
            yP1 = rand.Next(0, windowWidth);
            yP2 = rand.Next(0, windowHeight);
            xP2 = rand.Next(0, windowWidth);

            xSpeed = rand.Next(5, 10);
            ySpeed = rand.Next(5, 10);

            xP1 += xSpeed;
            yP1 += ySpeed;
            xP2 += xSpeed;
            yP2 += ySpeed;
        }
        if (xP1 > windowWidth)
        {
            xP1 = windowWidth;
            xSpeed = xSpeedChange * -1;
        }
        if (xP1 < 0)
        {
            xP1 = 0;
            xSpeed = xSpeedChange;
        }
        if (yP1 > windowHeight)
        {
            yP1 = windowHeight;
            ySpeed = ySpeedChange * -1;
        }
        if (yP1 < 0)
        {
            yP1 = 0;
            ySpeed = ySpeedChange;
        }
        //-----------------------//
        if (xP2 > windowWidth)
        {
            xP2 = windowWidth;
            xSpeed = xSpeedChange * -1;
        }
        if (xP2 < 0)
        {
            xP2 = 0;
            xSpeed = xSpeedChange;
        }
        if (yP2 > windowHeight)
        {
            yP2 = windowHeight;
            ySpeed = ySpeedChange * -1;
        }
        if (yP2 < 0)
        {
            yP2 = 0;
            ySpeed = ySpeedChange;
        }
        paintLine.DrawLine(penColor, xP1, yP1, xP2, yP2);


        canvas.Invalidate();
    }

    }
private bool playButton=false;
私有int xP1=10;
私人int yP1=10;
私有int xP2=100;
私人int yP2=50;
私有int xSpeed=0;
私有int Y速度=0;
专用窗高度=400;
私有窗口宽度=600;
私有int xSpeedChange=2;
私有int ySpeedChange=2;
private Random rand=new Random();
公共设置神秘化()
{
初始化组件();
}
私有void工具条带按钮1_单击(对象发送方,事件参数e)
{
playButton=true;
}
私有void canvas_Paint(对象发送器,PaintEventArgs e)
{
图形绘制线=e.图形;
Pen penColor=新笔(颜色:红色,3);
如果(播放按钮==真)
{
xP1=rand.Next(0,窗口高度);
yP1=rand.Next(0,窗口宽度);
yP2=下一个随机数(0,窗高);
xP2=rand.Next(0,窗口宽度);
xSpeed=rand.Next(5,10);
ySpeed=rand.Next(5,10);
xP1+=xSpeed;
yP1+=Y速度;
xP2+=xSpeed;
yP2+=Y速度;
}
如果(xP1>windowWidth)
{
xP1=窗宽;
xSpeed=xSpeedChange*-1;
}
if(xP1<0)
{
xP1=0;
xSpeed=xSpeedChange;
}
如果(yP1>窗高)
{
yP1=窗高;
ySpeed=ySpeedChange*-1;
}
如果(yP1<0)
{
yP1=0;
ySpeed=ySpeedChange;
}
//-----------------------//
如果(xP2>windowWidth)
{
xP2=窗宽;
xSpeed=xSpeedChange*-1;
}
if(xP2<0)
{
xP2=0;
xSpeed=xSpeedChange;
}
如果(yP2>窗高)
{
yP2=窗高;
ySpeed=ySpeedChange*-1;
}
如果(yP2<0)
{
yP2=0;
ySpeed=ySpeedChange;
}
画线。画线(铅笔色,xP1,yP1,xP2,yP2);
canvas.Invalidate();
}
}

不要调用
canvas.Invalidate()来自画布绘制事件。否则,您需要一个计时器或游戏循环来自画布绘制事件。否则,您需要计时器或游戏循环。