我在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();
}
有效!但问题是一切都被冻结了,似乎陷入了无效循环。但为什么后者有效而不是前者呢?我已经在这工作了几个小时了,我无法理解出了什么问题:/。
我觉得这很简单,但我无法绕过它。
我也尝试过更新和刷新,它们也不起作用。
答案 0 :(得分:0)
无效调用Draw 1 ,因此混合中的Invalidate,Invalidate - >画 - >无效 - >画 - > ..
“修复”是指不在绘图中无效。相反,只调用Invalidate以响应 input ,这需要[re] draw。在“不工作”(但实际上,它有效!)的情况下,请确保在适当时调用Invalidate - 但是从绘制处理程序外部。
1 无效调用“以后稍后”绘制“但是是异步操作”。它有效地发布WinForms进程在窗口消息循环中处理的消息,然后调用最终调用Draw的OnPaint。但是,从Draw调用Invalidate会导致“太快更新”。