发布动画精灵C#
我正在使用发布动画精灵C#,c#,animation,sprite,C#,Animation,Sprite,我正在使用Form\u Paint()事件中的e.Graphics.DrawImage绘制图像。我使用计时器刷新表单。问题是动画会闪烁。更新e似乎花费的时间太长。我在表单中有2个PictureBox 想法 更新: public Bitmap Paint(int state, Graphics g) { this.state = state; Bitmap temp; Graphics tempGraphics; t
Form\u Paint()
事件中的e.Graphics.DrawImage
绘制图像。我使用计时器
刷新表单。问题是动画会闪烁。更新e
似乎花费的时间太长。我在表单中有2个PictureBox
想法
更新:
public Bitmap Paint(int state, Graphics g)
{
this.state = state;
Bitmap temp;
Graphics tempGraphics;
temp = new Bitmap(45, 47, g);
tempGraphics = Graphics.FromImage(temp);
switch (state)
{
case 0:
tempGraphics.DrawImageUnscaled(img, x, y);
break;
case 1:
tempGraphics.DrawImageUnscaled(img, x, y - 42);
break;
}
}
这将在将精灵添加到表单之前准备精灵。通常的管理方式是将更新绘制到内存中的位图。然后将位图绘制到屏幕上。过程比较慢(因为有更多的事情要做),但它看起来更快,因为没有闪烁
但是,许多控件实际上会自动为您执行此操作。查看。在大多数情况下,这是由于未正确设置样式造成的,因此首先绘制背景(通常为白色),然后绘制图像
如果仅仅绘制双缓冲区不够快,也可以使用双缓冲区进行搜索/读取。我通过避免在表单本身上进行任何动画来解决这个问题。如果将控件添加到窗体,然后设置父对象的动画,则会覆盖UI线程。最好的解决方案是将所有动画保存在PictureBox中
因此:您要么直接使用
g.DrawImage()
设置动画,要么坚持使用PictureBox
我已经在使用。doublebuffering=true。也许GUI线程忙于处理图片框?我不知道。我不知道你的代码是做什么的。您还可以在最终绘制之前检查背景是否被清除为其他颜色。无论哪种方式,我已经用许多不同的方式和语言进行了双缓冲,我可以向您保证,如果做得正确,将不会出现闪烁。你已经读过我提到的那篇文章了吗?