在面板

时间:2017-11-29 06:09:20

标签: c# winforms

我是C#的新手,我正在尝试在Windows Forms应用程序中制作一个乒乓球游戏,我使用了一个面板,在里面,我使用了2个图片框,一个用于桨,另一个用于球。对于Paddle,我只使用了一个桨图像,并使用以下Forms事件来移动桨:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Left:
            if (pictureBox1.Left < panel1.Left)
            {
                pictureBox1.Left -= 0;
            }
            else
            {
                pictureBox1.Left -= 5;
            }
            break;
        case Keys.Right:
            if (pictureBox1.Right > panel1.Right)
            {
                pictureBox1.Left += 0;
            }
            else
            {
                pictureBox1.Left += 5;
            }
            break;
    }
}

工作正常,对于球,我创建了绘制圆形的图形,如下所示:

private void pictureBox2_Paint(object sender, PaintEventArgs e)
{
    Circle(e);
}

private void Circle(PaintEventArgs e)
{
    Graphics g1 = e.Graphics;
    Pen p1 = new Pen(Color.Black);
    g1.DrawEllipse(p1, 4, 4, 18, 18);
}

现在的问题是我无法使用Ball图形无限移动Picture Box我已经使用过计时器,但它仍然没有工作:

private void timer1_Tick(object sender, EventArgs e)
{
   //some for loop condition to move the Image
   for(;;)
     {
         //some condition to move the image infinitely
     }
}

我不太确定如何使用计时器功能来执行面板内图片框所需的无限移动。我试图给它一个单独的线程,但它不会工作。

1 个答案:

答案 0 :(得分:1)

我在评论部分找到了Oliver建议的解决方案我在tick事件中添加了一个计时器间隔,如下所示:

    public Form1()
    {
        InitializeComponent();
        timer.Interval = 15;
        timer.Tick += Timer_Tick;
        timer.Start();
    }

    private void Timer_Tick(object sender, EventArgs e)
    {
        pictureBoxBall.Left += 5;
    }

感谢您的解决方案。