c#更新方法
本文关键字:新方法 更新 | 更新日期: 2023-09-27 18:06:43
我想用System做一个小游戏。但在尝试创建一个每秒被调用多次的更新方法时(XNA或其他游戏引擎)被卡住了。
首先我试着自己更新系统。定时器,但屏幕开始闪烁,即使我检查我的窗体的油漆事件是否完成绘制。
现在我一直在寻找一个允许我这样做的库,但是没有运气。例如,XNA不允许我使用System之类的绘图。Drawing does和其他类似的库只接受"不可调整大小的图形"。
我的问题是:我能自己创建一个有效的Update方法吗?有没有图书馆可以做我想做的事?
c#中的我可以自己创建一个有效的Update方法吗?
-没有任何合理的方法。问题是,无论你做什么都将在CPU上运行,这在定义上是低效的。
你的问题是你没有使用缓冲区。不要更新活动窗口-更新另一个位图,然后在窗口上渲染那个位图。在google上查找"Double Buffering"
http://msdn.microsoft.com/en-us/library/3t7htc9c (v = vs.110) . aspx
有一些解释
标题是:
如何:使用双重缓冲来减少窗体和控件的图形闪烁
我是这样做的。绘制到位图,这是你的后缓冲。然后将图片框的图像设置为后缓冲位图。是的,使用图片框,它似乎比表单更能处理闪烁。设置图片框的大小模式为StretchImage,图像将填充图片框。
public partial class Form1 : Form
{
Bitmap _backbuffer;
public Form1()
{
InitializeComponent();
_backbuffer = new Bitmap(600, 400);
}
private void timer1_Tick(object sender, EventArgs e)
{
using (Graphics g = Graphics.FromImage(_backbuffer))
{
//clear the backbuffer
g.Clear(Color.White);
//draw stuff for the next frame
g.DrawEllipse(Pens.Black, new Rectangle(50, 50, 100, 100));
}
//draw the backbuffer to the screen
pictureBox1.Image = _backbuffer;
}
}