Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有计时器的C#动画在背景上闪烁_C#_Animation_Timer_Flicker - Fatal编程技术网

带有计时器的C#动画在背景上闪烁

带有计时器的C#动画在背景上闪烁,c#,animation,timer,flicker,C#,Animation,Timer,Flicker,我正在为我的C#程序制作动画。有一个太空火箭垂直上升8个像素,时间间隔为25毫秒。我已经成功地制作了动画,但由于picturebox的背景(我用于火箭)设置为透明,因此每当窗体移动时,它都会闪烁窗体的背景图像。我能做些什么来防止它 我用于计时器滴答声的代码: pictureBox1.Top -= 8; 附言:我试着用面板更换图片盒,放慢火箭和定时器的速度,但似乎什么都没变。我自己还没试过。 需要有一个渲染事件,您可以钩住该事件并对UI进行操作,从而平滑地渲染 试试下面这些: private

我正在为我的C#程序制作动画。有一个太空火箭垂直上升8个像素,时间间隔为25毫秒。我已经成功地制作了动画,但由于picturebox的背景(我用于火箭)设置为透明,因此每当窗体移动时,它都会闪烁窗体的背景图像。我能做些什么来防止它

我用于计时器滴答声的代码:

pictureBox1.Top -= 8;

附言:我试着用面板更换图片盒,放慢火箭和定时器的速度,但似乎什么都没变。

我自己还没试过。 需要有一个渲染事件,您可以钩住该事件并对UI进行操作,从而平滑地渲染

试试下面这些:

private void Form1_Load(object sender, System.EventArgs e)
{  
     pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint);
}

private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{ 
      pictureBox1.Top -= 8;
}
同样,这没有经过测试,我很久没有在winforms中开发任何东西了。 但这是你应该朝着平滑渲染的方向去做的

上面提到的双缓冲在某些情况下也是一个因素。
但这主要是解决问题的方法

这是winforms还是WPF?这是winforms。是否涉及其他控件?表单已双缓冲=真?大多数情况下,动画最好是在绘制事件中绘制动画,而不是四处移动控件。Double Buffered设置为true。我曾尝试在代码中实现这一点,但正如我在文章中所提到的,在代码中有25毫秒的间隔会减慢火箭的速度。但是由于你的代码中没有任何东西可以减慢火箭的速度,所以它飞得太快了。我该怎么做才能让它慢下来?嗯,那有什么帮助??你应该在画图中做一个e.Graphics.DrawImage(image,x,y),不要再移动那个pbox!!我不是winforms的开发人员,你可能是对的。我的重点是在绘画中操纵uievent@Unmit:您也不会显示或提示任何使移动变慢的代码!勾号应包含更改数据的代码(y位置…)和无效。如果绘制速度过快,但确实渲染过慢,则应使用png图像绘制火箭。我会检查两次间隔之间经过的时间,并相应地移动火箭。假设您有1000个像素要移动,距离上次间隔已过去25毫秒。然后你移动火箭40px