增加运动速度

时间:2011-10-14 14:46:16

标签: c#

 boolean f=0;
 timer1.Interval=1;
private void timer1_Tick(object sender, System.Timers.ElapsedEventArgs e)
    {
  if (f == 0)
        {
            if (pictureBox1.Left < 200)
            {
                pictureBox1.Left += 1;
            }
            else
            {
                f = 1;

            }

        }
        else
        {
            if (pictureBox1.Left > 100)
            {
                pictureBox1.Left -= 1;
            }
            else
            {
                f = 0;

            }

        }    
      }
    }

此代码在宽度表单上移动图片框。

但移动这张照片的速度非常慢。

如何以更快的速度移动图片?

修改

 public void a()
    {
        while (true)
        {
            if (f == 0)
            {
                while (pictureBox1.Left < 200)
                {
                    pictureBox1.Left += 1;
                    Thread.Sleep(1);
                }

                f = 1;

            }
            else
            {
                while (pictureBox1.Left > 100)
                {
                    pictureBox1.Left -= 1;
                    Thread.Sleep(1);
                }


                f = 0;



            }
        }
    }






        ts=new ThreadStart(a);
        t=new Thread(ts);
        t.Start();

可以使用线程进行此项工作,但我想使用计时器

3 个答案:

答案 0 :(得分:3)

控制速度的两个因素是:

  • 计时器的间隔(即场景的更新频率)
  • 物体位置的变化(即每个间隔移动多少)

鉴于你的计时器的间隔是它的最低值,你可以增加每个轴上移动的像素数,以改变移动的速度。

答案 1 :(得分:1)

 timer1.Interval=1;

你无法得到这个。 Windows中的定时器运行速度不会超过时钟中断速率,默认为1/64秒。假设您的UI线程中没有出现其他延迟,则最早的Tick事件可以运行,为15.625毫秒。由于您将框移动一个像素为100像素,因此需要100 x 15.625 = 1.56秒。是的,那很慢。

不过,这是每秒64次更新,这并不慢。这是矫枉过正,人眼无法跟上。电影中的电影以每秒24帧的速度更新。简单的问题是您的定位增量太小。

一个好的计时器间隔值是45毫秒,每秒可以获得21次更新。根据每次更新要移动的量来调整位置增量。如果绘制图像并更新容器背景需要更长时间,您仍然可能无法得到它。如果必须调整图像大小以适合图片框或其像素格式不是32bppPArgb,则绘制图像的成本可能很高。

答案 2 :(得分:0)

如果它是一张大图片,那么如果你逐个像素地移动它需要一些时间。如果增加值,可以获得更快的移动速度。 e.g。

pictureBox1.Left -= 5;