我只是在玩WinForms和C#。现在我试图为从左边缘到右边缘移动的矩形设置动画。动画正在运作。但动画并不顺畅。就像帧速率稍微改变一样。
你有什么想法吗?我不想使用图形库(DirectX,OpenGL)等。我宁愿留在WinForms(我已经在使用wpf版本)而不使用BackgroundGraphics。我只想了解2D / 3D的一些概念,也许你有一些好主意=)
这是我的代码:
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(Rectangle as Canvas.Children)编写了它,但没有改进。我不知道问题是什么。
我的目标是尝试一些图形概念,从零开始。所以首先要将一个图形元素从一个地方转换为另一个地方。然后尝试双缓冲以消除闪烁。然后VSync消除撕裂等。
我只需要一个绘图区域,我可以在计时器刻度处绘制一些像素。
矩形的移动不是连续的。它有所不同。你可以看到它的库存。我试过像Lerp这样的东西,但它是一个线性运动,所以在这种情况下它没有意义。