1

我有一个为我正在开发的游戏创建的自定义 UI 小部件库。我需要考虑绘图顺序并将其重新安装到我目前拥有的东西中,并且不确定最好的方法。我有一个从 xml 文件加载小部件的 UI 类。它将所有小部件存储在地图中,其中键是小部件的字符串名称。

Widget 可以在父子关系中保存其他 Widget(因此 Widget 类有一个 Widget 的映射,其中名称再次成为键)。当我绘制时,我循环遍历 UI 小部件映射,并且只调用没有父级(最顶层)的小部件的 Draw() 函数。在每个 Widget 的 Draw() 中,它循环遍历它的子组件并调用它们的 Draw() 函数。

问题是什么是让每个小部件的排序顺序变量在保持地图的同时按排序顺序变量的顺序绘制的好方法,因为我喜欢通过字符串键名轻松查找小部件?

有任何想法吗?

4

1 回答 1

1

当您需要多种方式来订购同一组商品时,您有两种选择:

  • 存储两个订单,或
  • 存储一份订单,并即时计算出另一份订单

存储第二组排序是一种用内存支付以节省 CPU 周期的方法。

在您的情况下,您有两种顺序:一种由名称到小部件映射实现,另一种用于绘图顺序。您有三种实现选择:

  • 将小部件存储在地图中(即按名称排序),并在每次需要确定绘制顺序时运行拓扑排序- 我在这里假设绘制顺序的原因是确保在子级之前绘制父级,这意味着拓扑排序。
  • 按绘制顺序将小部件存储在列表中,并运行线性查找以按名称获取小部件- 当您绘制大量小部件但很少按名称查找时,这可能是一个不错的选择。
  • 将小部件存储在地图中(即按名称排序),并制作一个单独的小部件或小部件名称列表,根据绘图顺序排列- 这种双重核算会花费内存来回购您原本会浪费的 CPU 周期-按图纸顺序排序。
于 2013-02-24T12:11:23.603 回答