Ogmo Editor是使用C#编写的一个不错的开源2D地图编辑器,不幸的是它具有很高的CPU使用率问题-每当您打开实际的关卡编辑屏幕时,它就会完全饱和单个CPU内核。我查看了源代码,并进行了分析,得出的结论是,LevelEditor自定义控件的OnPaint处理程序被重复调用。我对Windows Forms API不太熟悉,并检查了有关自定义控件的MSDN文档,但无法确定问题的根源。
然后,我查看了另一个类似的名为tIDE的开源项目,对我来说,它似乎正在渲染其编辑屏幕-MapPanel控件以一种非常相似的方式-有关详细信息,请参见链接中的OnMapPaint()函数定义。
我不确定为什么控件在不更改时应该刷新,我认为熟悉API的人也许可以提出解决方案。
问题是关卡编辑器文件中的以下代码:
void Application_Idle(object sender, EventArgs e)
{
Invalidate();
LevelView.Update();
}
该应用程序空闲事件发生之前的应用即将成为闲置的,这导致了一个无限循环重绘,这是非常处理器密集型。删除Invalidate()调用需要更新代码,以便每当发生用户交互时都可以重绘,这需要对项目中的多个文件进行更改,并且可以在Bitbucket上看到生成的提交。
对于其他有类似问题的人,可能由于控件或手动Invalidate()调用的更改而导致重绘过多的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句