UI小部件按顺序绘制

时间:2013-02-24 11:47:26

标签: c++

我有一个自定义UI Widget库,我为我正在开发的游戏创建。我需要考虑绘制顺序和复古适合我现在拥有的东西,而不确定最好的方法。我有一个UI类,它从xml文件加载小部件。它将所有小部件存储在地图中,其中键是小部件的字符串名称。

窗口小部件可以在父子关系中保存其他窗口小部件(因此窗口小部件类具有窗口小部件,其中名称再次成为密钥)。当我绘制时,我遍历UI小部件地图,只调用Widget的Draw()函数,它没有父级(最顶层)。在每个Widget的Draw()中,它遍历它的子节点并调用它们的Draw()函数。

问题是,在保留地图的同时,按照排序顺序变量的顺序绘制每个窗口小部件的排序顺序变量是一种好方法,因为我喜欢通过字符串键名来轻松找到窗口小部件?

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

  • 存储两个订单,或
  • 存储一个订单,并另外找出另一个

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

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

  • 在地图中存储小部件(即按名称排序),并在每次需要确定绘图顺序时运行拓扑排序 - 我在此假设订购绘图的原因是确保父母在孩子面前被吸引,这意味着拓扑排序。
  • 按绘图顺序将小部件存储在列表中,并运行线性查找以按名称获取小部件 - 当您多次绘制小部件时,这可能是一个不错的选择,但是按名称查找很少。
  • 在地图中存储小部件(即按名称排序),并根据绘图顺序单独列出小部件或小部件名称 - 此双重会计花费内存来回购CPU循环,否则您将浪费在绘图顺序中重新排序。