平铺地图和精灵:我做得对吗?

2024-05-28 23:37:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python+pyglet开发一个老式的2drpg。在

地图由几层(最多10层)组成,每层都由正方形的瓷砖(32x32像素)组成。精灵(党的角色,NPC和其他一些东西)被画在两层之间(通常就在最后一层之前)。在

为了渲染它,我使用了一个带有许多OrderedGroups的批处理:每层一个组,每个精灵一个组。在

精灵的问题是它们必须按y值的递减顺序进行渲染,因此组按如下方式排列(假设贴图中有3个层,并且必须在最后一个层之前绘制2个精灵):

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

当我向批处理添加层精灵时,我指定它们是静态的。当精灵充满活力的时候,我会加上。在

所以我的第一个问题是:既然它们都属于同一批,这不是矛盾吗?(换言之:“static”或“dynamic”是sprite对象的属性还是批处理的属性?)(注意:我确切地说,我对OpenGL的了解很少,也不知道批处理和组是如何实现的)

目前,性能是正确的(我想要60 fps,我有他们多达8个移动精灵),但性能下降很快超过8个移动精灵(这不应该发生在最后的游戏,但我希望我的引擎是最有效率的,不需要翻译部分的C/ASM)。在

所以我的第二个问题是:我选择的策略(使用批处理,并且尽可能少)是一个好的策略吗?在

提前感谢您的回答


Tags: thelayer属性地图老式性能策略精灵
1条回答
网友
1楼 · 发布于 2024-05-28 23:37:20

我不是Pyton或Pyglet用户,但这里有一些提示:

  1. 您使用OpenGL

    因此您不需要任何Y和/或视图平面排序渲染。Z缓冲区可以为您完成,因此绘图顺序可以是任何。。。除非你使用透明瓷砖(在这种情况下,你别无选择)。

  2. 您提供代码

    但实际上它并没有告诉你要确保你没有在渲染中对任何东西进行排序/分组。似乎在每个帧上都创建了有序列表,这可能会非线性地影响性能。通常对于硬件加速代码都是好的,直到你到达某个关键的瓶颈,然后它会突然进入地狱!!!

  3. 将图层贴图保存在单独的二维地图中

    那么您根本不需要任何排序/分组。如果对象从一层转到另一层,则只需相应地更新booth层

相关问题 更多 >

    热门问题