多个表格和单个更新,它将起作用吗?

时间:2020-03-05 18:59:33  来源:igfitidea点击:

我需要在.NET CF中制作一个具有不同/单个表单的应用程序,每个表单上都有很多绘图/动画。我希望有一个单独的update [我自己用于状态管理等功能],以便我可以不同的状态,以便我的[J2ME游戏代码]可以正常工作而没有太大变化。我遇到了一些可能的情况。哪一个是完美的?

  • 使用单一表格并手动添加/删除控件,然后使用任何游戏循环技巧。
  • 使用控件创建不同的表单,并在主线程中调用update和application.doEvents()。[while(isAppRunning){UPDATE()Application.DoEvents()}
  • 根据需要在每个表单上创建一个更新-绘制循环。
  • 还有其他想法。

请给我建议

解决方案

回答

如果这是一个游戏,那么我会放弃大多数表单并使用基本的要素,请尽可能处理位图,并通过覆盖主表单的paint方法或者驻留在其中的控件(也许是面板)来进行渲染。这样可以为我们带来更好的性能。

主要问题是,紧凑型框架并不是真正为很多UI乐趣而设计的,我们不会像完整框架中那样免费获得双缓冲,适当的透明性对WinForm控件来说是很重要的,如果我们坚持使用UI线程太长时间会导致严重的渲染故障。如果我们在后台线程中执行过多操作,我们甚至可能会得到这些! :O

我们永远不会通过显式调用Application.DoEvents来获得最佳性能,我的经验法则是仅在进行故障排除或者在UI中编写小技巧时才使用它。

可能需要将游戏粘在后台线程上,然后调用.Invoke在控件上以编组回到主UI线程以更新显示,从而使UI有足够的时间来响应并处理用户输入。
用户输入是我避免使用常规winform控件的另一个原因,因为移动设备通常没有很多键,因此能够重新映射它们非常有用,因此我通常避免使用诸如TextBoxes之类的具有预设键事件/响应的控件。

我还避免使用不同的表单,因为显示新表单可以提供微妙的暂停,我通常在编写商业软件时将控件换为主表单,以避免出现此问题。

在一天结束时,可能有必要尝试各种技术以了解最有效的方法。还要看看我们是否可以从使用CF开发游戏的人那里获得任何提示,就像我通常只做商务软件一样。

HTH!