2013-02-24 43 views
1

我有一个自定义用户界面小工具库,为我正在制作的游戏创建。我需要考虑绘制顺序和复古适合我目前有什么,并不确定最好的方式来做到这一点。我有一个UI类,它从xml文件加载小部件。它将所有小部件存储在映射中,其中键是小部件的字符串名称。UI小工具按顺序绘制

小部件可以在父子关系中保存其他小部件(所以Widget类具有小部件的映射,其中名称是关键字)。当我通过UI小部件地图绘制I循环时,只调用没有父级(最顶层)的Widget的Draw()函数。在每个Widget的Draw()中,它循环遍历它的子节点并调用它们的Draw()函数。

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

任何想法?

+1

一个'map'可以方便地通过名称访问小部件,还有一个用于绘图的排序'vector'(或'list')? – 2013-02-24 11:49:41

+0

这很常见吗?它们都不被认为是浪费空间来存储它们?我知道他们是指针,但它仍然占用存储空间的权利? – user441521 2013-02-24 11:51:43

+0

我没有亲身经历,但这就是我会做的。除非你拥有数百万的小部件,否则这不会成为问题。 – 2013-02-24 12:25:13

回答

1

当你需要多种方式订购的同一组项目中,你有两个选择:

  • 同时存储排序,或
  • 存储一个排序,并找出在飞行
  • 另一个

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

在你的情况下,你有两个顺序:一个由名称到widget的地图实现,另一个为绘图顺序。您有三种实现方式选择:

  • 存储部件的映射(即按名称排序),并在每次需要弄清楚时间运行拓扑分类绘制顺序 - 我想在这里说,之所以下令绘画是为了确保父母在孩子面前被绘制,这意味着拓扑排序。
  • 通过绘图顺序将小部件存储在列表中,然后运行线性查找以获取小部件的名称 - 当您绘制小部件很多时,这可能是一个不错的选择,但很少按名称查找。
  • 在地图中存储小部件(按名称排序),并根据绘制顺序排列小部件或小部件名称的单独列表 - 此双重记帐花费内存来购回您的CPU周期否则将浪费在绘图顺序中重新排序。