gpt4 book ai didi

c++ - UI Widget 按顺序绘制

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:45 27 4
gpt4 key购买 nike

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

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

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

有什么想法吗?

最佳答案

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

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

存储第二组顺序是一种节省 CPU 周期的内存支付方式。

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

  • 将小部件存储在 map 中(即按名称排序),并在每次需要确定绘制顺序时运行拓扑排序 - 我在这里假设绘制顺序的原因是确保 parent 在 child 之前绘制,这意味着拓扑排序。
  • 按绘制顺序将小部件存储在列表中,并运行线性查找以按名称获取小部件 - 当您经常绘制小部件时,这可能是一个不错的选择,但非常容易按名称查找不经常。
  • 在 map 中存储小部件(即按名称排序),并根据绘制顺序排列单独的小部件或小部件名称列表 - 这种双重核算会花费内存来买回否则您会浪费在绘图顺序中重新排序的 CPU 周期。

关于c++ - UI Widget 按顺序绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15051420/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com