C# 在winform上流畅地移动图片
我在winform中添加了一个计时器控件(只需使用VS2017拖放即可)。 此计时器控件在窗体上从左向右移动图片。当其处于启用状态时C# 在winform上流畅地移动图片,c#,timer,C#,Timer,我在winform中添加了一个计时器控件(只需使用VS2017拖放即可)。 此计时器控件在窗体上从左向右移动图片。当其处于启用状态时 private void timer1_Tick(object sender, EventArgs e) { int x = PictureBox1.Location.X + 1; if (x < 400) PixtureBox1.Location = new Point(x, 100); } private void
private void timer1_Tick(object sender, EventArgs e)
{
int x = PictureBox1.Location.X + 1;
if (x < 400)
PixtureBox1.Location = new Point(x, 100);
}
private void timer1\u勾选(对象发送方,事件参数e)
{
int x=PictureBox1.Location.x+1;
如果(x<400)
pix1.位置=新点(x100);
}
问题是这个移动操作移动不流畅,移动不稳。我必须坚持winform,并且想知道对于这个摇摇欲坠的运动能做些什么
如果尝试最小化间隔或增加位移,但它始终不稳定。您必须尝试使用
OnPaint()
方法制作动画。这里有一个链接到。
您可以将计时器设置为为为要实现的目标帧速率触发,并调用Invalidate()
或Invalidate(true)
重新绘制整个窗口
帧速率指的是你正在制作动画的控件必须被重画的次数,如果你想要帧速率为30,请通过1000/30
计算计时器间隔,即1000毫秒=1秒
因此
timer.Interval=1000/30
并在timer.Tick事件中调用Invalidate()
以触发OnPaint()事件。您使用的间隔是什么?Winforms中没有流畅的动画,因为它无法与监视器刷新同步。在某些情况下,您可能还希望在浮动中进行跟踪,但您的示例仅适用于每1像素注意抖动和闪烁之间的区别;后者可以通过双缓冲来避免。事实上,在Winforms上做起来有点困难,目前时间间隔较低。它相对平滑,可能通过适当的线程延迟(不确定)或在时间上动态移动更好。。我不确定我们是否希望找到一个解决方案,但目前为止,所有朝这个方向进行的优化都没有太大的改进。一个解决方案可能是不可能的。你能再澄清一点吗?我一直在读这篇文章,但没有提到帧速率,我也不清楚如何使用更改计时器事件onpaint@user3800527编辑了我的答案,包括一些解释。