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();
可以使用线程进行此项工作,但我想使用计时器
答案 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;