【问题标题】:UI Widget drawing in orderUI Widget按顺序绘制
【发布时间】:2013-02-24 20:11:23
【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

  • 一个map 用于按名称轻松访问小部件,以及一个排序的vector(或list)用于绘图?
  • 这很常见吗?存储它们不被认为是浪费空间吗?我知道它们是指针,但它仍然占用存储空间对吗?
  • 我没有亲身经历,但我会这样做。除非您拥有数百万个小部件,否则这不会成为问题。

标签: c++


【解决方案1】:

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

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

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

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

  • 在地图中存储小部件(即按名称排序),并在每次需要确定绘图顺序时运行拓扑排序 - 我在这里假设订购绘图的原因是确保父母被画在孩子之前,暗示了拓扑排序。
  • 按绘制顺序将小部件存储在列表中,并运行线性查找以按名称获取小部件 - 当您经常绘制小部件但很少按名称查找时,这可能是一个不错的选择。
  • 在地图中存储小部件(即按名称排序),并根据绘图顺序制作单独的小部件或小部件名称列表 - 这种双重核算会花费内存来回购 CPU 周期否则您会浪费在按图纸顺序重新订购。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 2016-09-12
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2021-10-06
    相关资源
    最近更新 更多