我对C#还是很陌生,我正在尝试制作一个简单的程序,该程序允许使用输入来移动矩形。问题在于,当在C#中更新矩形的位置时,矩形有时似乎会消失很短的时间,然后重新出现在新位置,而不是始终如一地移动。
我已经使用p5.js和java(Jswing)做过类似的事情。
这是我写的代码
public class WinFormsTest : Form
{
System.Windows.Forms.Timer timer;
Graphics graphics;
Brush brush;
Rectangle rect = new Rectangle(0, 0, 80, 80);
public WinFormsTest()
{
Draw();
}
public void Draw()
{
Text = "HelloWold";
Height = 800;
Width = 800;
timer = new System.Windows.Forms.Timer();
timer.Interval = 1;
timer.Tick += new EventHandler(timer_Tick);
Invalidate();
timer.Start();
}
private void timer_Tick(object sender, EventArgs e)
{
graphics = CreateGraphics();
brush = new SolidBrush(Color.Green);
graphics.Clear(Color.White);
Random rnd = new Random();
graphics.FillRectangle(brush, rect);
rect.X++;
rect.Y++;
}
public static void Main(string[] args)
{
Application.Run(new WinFormsTest());
}
}
我希望矩形能够连续移动而不会消失或消失。
答案 0 :(得分:3)
请勿在winforms中执行此操作。它对图形加速或优化的支持非常有限。
尝试wpf
或uwp
,它具有许多与开箱即用的动画有关的功能。
您也可以寻求DirectX
解决方案,但这将是一个过大的杀伤力。
请注意,这些框架通常使用MVVM
模式,其中您有一个Page
及其代码,一个ViewModel
作为数据源,而{{ 1}}由View
组成。
与普通的XAML
相比,这要难一些,但是如果您是一个学习者,并且实际上想构建外观漂亮的应用程序,肯定是要走的路。
WPF动画带有很多基类/帮助类,如here
以下是一个示例,纯WinForms
:
XAML