c#更新方法

本文关键字:新方法 更新 | 更新日期: 2023-09-27 18:06:43

我想用System做一个小游戏。但在尝试创建一个每秒被调用多次的更新方法时(XNA或其他游戏引擎)被卡住了。

首先我试着自己更新系统。定时器,但屏幕开始闪烁,即使我检查我的窗体的油漆事件是否完成绘制。

现在我一直在寻找一个允许我这样做的库,但是没有运气。例如,XNA不允许我使用System之类的绘图。Drawing does和其他类似的库只接受"不可调整大小的图形"。

我的问题是:我能自己创建一个有效的Update方法吗?有没有图书馆可以做我想做的事?

c#更新方法

我可以自己创建一个有效的Update方法吗?

c#中的

-没有任何合理的方法。问题是,无论你做什么都将在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;
    }
}