我正在用 Python + pyglet 开发一个老式的 2D RPG。
该地图由几层(最多 10 层)组成,每一层都由正方形瓦片(32x32 像素)组成。精灵(派对角色、NPC 和其他一些东西)在两层之间绘制(通常就在最后一层之前)。
为了渲染它,我使用一个带有许多 OrderedGroups 的 Batch:每层一组,每个精灵一组。
sprite 的问题是它们必须按 y 值的递减顺序呈现,因此组排列如下(假设地图中有 3 层,并且必须在最后一个之前绘制 2 个 sprite):
g[0] = OrderedGroup(0) : first layer
g[1] = OrderedGroup(1) : second layer
g[2] = OrderedGroup(2) : empty, serves as a base for the following :
OrderedGroup(0, parent = g[2]) : the highest sprite
OrderedGroup(1, parent = g[2]) : the lowest sprite
g[3] = OrderedGroup(3) : the third layer
当我将图层精灵添加到批处理时,我指定它们是静态的。当我添加派对精灵时,它们是“动态的”。
所以我的第一个问题:既然它们都属于同一个批次,是不是很矛盾?(换一种说法:“静态”或“动态”是精灵对象还是批处理的属性?)(注意:我确切地说我对 OpenGL 的了解很少,也不知道批处理和组是如何实现的)
目前,性能是正确的(我想要 60 fps,并且我有最多 8 个移动精灵),但是当移动精灵超过 8 个时,性能会迅速下降(这在最终游戏中不应该发生,但我想要我的引擎是最高效的,无需在 C/ASM 中翻译部件)。
所以我的第二个问题:我选择的策略(使用批处理,并且尽可能少)是好的策略吗?
提前感谢您的回答