使用WinForms和计时器(C#)平滑动画
我只是在玩WinForms和C。现在,我正在尝试设置一个矩形从左边缘移动到右边缘的动画。动画正在运行。但动画并不流畅。比如帧速率有点变化 你有什么想法吗?我不想使用图形库(DirectX、OpenGL)等,我更喜欢使用WinForms(我已经在开发wpf版本),而不使用背景图形。我只是想了解一些2D/3D的概念,也许你有一些好主意=) 这是我的代码:使用WinForms和计时器(C#)平滑动画,c#,winforms,animation,timer,C#,Winforms,Animation,Timer,我只是在玩WinForms和C。现在,我正在尝试设置一个矩形从左边缘移动到右边缘的动画。动画正在运行。但动画并不流畅。比如帧速率有点变化 你有什么想法吗?我不想使用图形库(DirectX、OpenGL)等,我更喜欢使用WinForms(我已经在开发wpf版本),而不使用背景图形。我只是想了解一些2D/3D的概念,也许你有一些好主意=) 这是我的代码: PictureBox pbScreen; public FormMain() { ... bmp
PictureBox pbScreen;
public FormMain()
{
...
bmpFB = new Bitmap(640, 480);
bmpBB = new Bitmap(640, 480);
...
tmrTick.Interval = 10;
tmrTick.Enabled = true;
}
private void TmrTick_Tick(object sender, EventArgs e)
{
RefreshScreen();
}
private void RefreshScreen()
{
CalcBackBuffer();
bmpFB = bmpBB;
pbScreen.Image = bmpFB;
}
private void CalcBackBuffer()
{
posX += 1;
// Collision reaction
// if the rectangle arrives at the edge, the position X will be resetet to 0
if (posX > pbScreen.Width)
{
posX = pbScreen.Location.X;
}
using (Graphics gr = Graphics.FromImage(bmpBB))
{
gr.Clear(Color.White);
gr.FillRectangle(Brushes.Black, new Rectangle(posX, posY, 2, 480));
}
}
编辑:
嗯,好的,我在一个面板中设置了动画,没有改进。今天我用WPF(Canvas.Children的矩形)对它进行了编码,但没有改进。我不知道是什么问题
我的目标是尝试一些图形概念,从零开始。所以第一件事就是把一个图形元素从一个地方翻译到另一个地方。然后尝试双缓冲以消除闪烁。然后用VSync消除撕裂等
我只需要一个绘图区域,在那里我可以画一些像素在定时器滴答
矩形的移动不是连续的。情况各不相同。你可以看到它的长袜。我尝试过类似Lerp的方法,但它是一种线性运动,所以在这种情况下没有意义。1。在窗体中创建一个面板并直接在其上绘制。2.使用3。在计时器勾选时,使面板无效以刷新。4.在表单5上设置双缓冲。在勾号事件(或从该事件调用的函数)中执行计算在绘制事件中不执行计算,仅将其保存为绘图。。。这会让你找到一些地方,好吧,我会试着在面板上画出来,然后进行明确的计算。我试图自己编写的双缓冲。谢谢。用WinForms矛盾修饰法平滑动画。