在XNA项目中屏幕没有刷新

时间:2013-09-20 02:43:24

标签: c# winforms xna

我在xna中使用winforms。 到目前为止,一切都在工作,除了绘图。这是我的初始代码:

        protected override void Draw()
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);
            spriteBatch.Begin();
            tileSheet.Draw(spriteBatch);
            foreach (Image img in selector)
                img.Draw(spriteBatch);
            spriteBatch.End();
        }

我放置了一个断点,它正在调用draw方法,但屏幕上没有任何变化,但是当我这样做时:

protected override void Draw()
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);
        spriteBatch.Begin();
        tileSheet.Draw(spriteBatch);
        foreach (Image img in selector)
            img.Draw(spriteBatch);
        spriteBatch.End();

        Invalidate();
    }

有效!但问题是一切都被冻结了,似乎陷入了无效循环。但为什么后者有效而不是前者呢?我已经在这工作了几个小时了,我无法理解出了什么问题:/。

我觉得这很简单,但我无法绕过它。

我也尝试过更新和刷新,它们也不起作用。

1 个答案:

答案 0 :(得分:0)

无效调用Draw 1 ,因此混合中的Invalidate,Invalidate - >画 - >无效 - >画 - > ..

“修复”是指在绘图中无效。相反,只调用Invalidate以响应 input ,这需要[re] draw。在“不工作”(但实际上,它有效!)的情况下,请确保在适当时调用Invalidate - 但是从绘制处理程序外部。


1 无效调用“以后稍后”绘制“但是是异步操作”。它有效地发布WinForms进程在窗口消息循环中处理的消息,然后调用最终调用Draw的OnPaint。但是,从Draw调用Invalidate会导致“太快更新”。