在WinForms中执行动画时,如何达到更高的fps?(如何减少代码中的“周期”?)

时间:2019-04-27 20:51:33

标签: c# winforms animation frame-rate

首先,对于我的英语水平不佳以及语法用法错误,我深表歉意。

我正在做一个项目,作为我的功课,希望我们在屏幕上显示动画,因此我决定在C#中使用WinForms来实现这一目标。

但是,当我放置两三个图像并绘制一些线条后,动画变得滞后并且获得了低fps。因此,我添加了两个秒表来记录“绘制时间”和“每个图形之间的时间”,并注释掉添加图像和图形的零件,并且为图形零件获取0毫秒(这是合理的,因为我注释了该零件)并得到了两次绘图之间大约需要15毫秒(我认为这样做很耗时!)是不合理的!

我希望我的动画以60 fps的速度运行,这意味着每张图之间只能花费16〜17毫秒。但是,如果我想满足此需求,我只能添加一些内容。

谁能解释这15毫秒内的工作,我可以减少这些时间吗?或者如何在动画中获得更高的fps? 以及其他人如何在C#中以高fps的速度显示精美的动画?

我在笔记本电脑上的Visual Studio 2017中构建了它。 然后这是我的代码的一部分,如果需要,我可以尝试在此处移植完整的项目。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace Animation
{
    public partial class Form1 : Form
    {
        Stopwatch painttime = new Stopwatch();
        Stopwatch cycletime = new Stopwatch();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            cycletime.Stop();
            painttime.Start();

            //paint whatever you want

            painttime.Stop();
            textBox1.Text = painttime.ElapsedMilliseconds.ToString();
            textBox2.Text = cycletime.ElapsedMilliseconds.ToString();
            cycletime.Restart();
            painttime.Reset();
        }

        //ticks every 1 miliseconds
        private void timer1_Tick(object sender, EventArgs e)
        {
            this.Invalidate();
        }
    }
}

当我运行上述代码时,屏幕显示“ painttime”为0毫秒,如果我什么都不画,则“ cycletime”为15毫秒。

0 个答案:

没有答案