0

我正在制作带有地图的视频游戏,并试图在其上打印每个区域的名称。为此,我使用了 pyglet.text.Label 对象。尽管所有这些标签都分配给同一个批次,但当我绘制批次时,我的 FPS 低于 1。这是初始化所有标签的循环:

        label_font_size = 30 
        for i in range(self.reg_center_list.shape[1]):
                temp= pg.text.label(str(self.reg_names[i]), x=self.reg_center_list[0,i], y=self.reg_center_list[1,i], 
                group=self.names_group, batch=self.low_prox_batch, anchor_x='center',anchor_y='center', 
                font_size=label_font_size)

标签文本存储在 self.reg_names 列表中,它们相对于地图的位置存储在 self.reg_center_list 中。它们总共是添加到批次中的 3500 多个标签。我做了一个实验,并在一个标签中打印了相同数量的文本,如下所示:

        stringg=''
        label_font_size = 30
        for i in range(self.reg_center_list.shape[1]):
            stringg=stringg + str(self.reg_names[i])
        temp= pg.text.Label(stringg, x=self.reg_center_list[0,i], y=self.reg_center_list[1,i],group=self.names_group,
        batch=self.low_prox_batch, anchor_x='center',anchor_y='center', font_size=label_font_size)

尽管实际上绘制了相同数量的字形,但效果很好,对 fps 没有显着影响。将此文本拆分到多个标签时似乎会产生一些开销。我想知道问题是否可能是由于某种原因,同一字形的纹理组在标签之间不共享,导致程序为每个字形和每个标签切换组,但我很难确认这个理论以及找到一个可能的解决方案。有人知道如何解决这个问题吗?任何帮助都会得到帮助,如果需要更多信息或不清楚的地方,请发表评论。:)

4

1 回答 1

1

这是一个较老的问题,没有正确考虑标签批次中的分组。它已在pyglet v1.4.9中修复:

在使用自定义标签组时修复 TextLayoutGroup 合并。

而且由于您运行的是 1.4.8,这很可能是问题所在。
无论哪种方式,您都应该更新到最新版本,只需执行以下操作:

sudo pip install --upgrade pyglet

获取最新版本,或者pip install --upgrade pyglet如果您更喜欢用户本地 pckages。

于 2020-07-21T08:06:49.343 回答