使用WinForms和计时器(C#)进行平滑动画

时间:2017-06-01 15:50:18

标签: c# winforms animation timer

我只是在玩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这样的东西,但它是一个线性运动,所以在这种情况下它没有意义。

0 个答案:

没有答案