首先,对于我的英语水平不佳以及语法用法错误,我深表歉意。
我正在做一个项目,作为我的功课,希望我们在屏幕上显示动画,因此我决定在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毫秒。