Во-первых, я прошу прощения за плохое знание английского языка и неправильное использование грамматики.
Я строил проект в качестве школьной работы, в котором мы хотим, чтобы мы отображали анимацию на экране, поэтому я решил использовать WinForms в C # для достижения этой цели.
Однако, после того, как я наложил два или три изображения и нарисовал несколько линий, анимация стала отставать и получать низкие fps. Поэтому я добавляю две секундомера для записи «времени рисования» и «времени между каждым рисунком» и закомментирую детали, которые добавляют изображения и рисунок, и получаю 0 миллисекунд для рисования детали (это разумно, потому что я закомментирую деталь) и получаю около 15 миллисекунд между рисованием (я думаю, это не разумно, так долго зря!?)
Я надеюсь, что моя анимация работает со скоростью 60 кадров в секунду, что означает, что между каждым рисунком может пройти всего 16 ~ 17 миллисекунд. Однако я могу добавить лишь несколько вещей, если я хочу удовлетворить это требование.
Может кто-нибудь объяснить, что он делает в эти 15 миллисекунд, и могу ли я сократить это время? Или как я могу получить более высокий fps в моей анимации?
И как другие люди могут показывать причудливую анимацию на высоких fps в C #?
Я собрал его в 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();
}
}
}
Когда я запускаю над кодом, на экране отображается, что «время рисования» равно 0 миллисекундам, а «время цикла» составляет около 15 миллисекунд, если я ничего не рисую.