我正试图让一个图片框顺利地在一个winform上移动,它唯一的方式看起来很平滑就是如果我使用一个计时器并将像素速度降低到每1微秒1个像素,甚至那个图片盒的运动很慢。
如何使用微秒使图片框移动得更快,同时在移动时保持平滑度?
答案 0 :(得分:4)
首先我不知道你的要求是什么,也许这可能有所帮助。
时机是一个棘手的问题。首先所有的.net计时器都是毫秒级的分辨率,而且你不能保证系统会使用某种类型的高分辨率计时器返回你。 .net秒表使用底层的高分辨率计时器,但没有回调机制,因此您需要使用不同的线程和轮询来构建自己。也就是说,您可能希望以不同的方式查看动画,然后移动图片框,例如使用位blt或超载低级别的颜料。
答案 1 :(得分:1)
我认为在一个表单中移动一个控件是一个相当慢的操作;所以这并不是说你的计时器不够精细,它无论如何都会闪烁。您可以将图片框中的任何内容绘制到Paint事件中的表单背景上,而不是移动图片框,而不是在计时器滴答时将您绘制的位置更改为。通过这种方式,您可以利用double buffering之类的内容来获得更流畅的动画效果。您会发现即使是像40ms(25Hz刷新)这样的相对较大的间隔也应该足够了。