Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 平铺地图和精灵:我这样做对吗?_Python_2d_Tiles_Pyglet - Fatal编程技术网

Python 平铺地图和精灵:我这样做对吗?

Python 平铺地图和精灵:我这样做对吗?,python,2d,tiles,pyglet,Python,2d,Tiles,Pyglet,我正在用Python+pyglet开发一个老式的2D RPG 地图由几层组成,最多10层,每层由32x32像素的正方形瓷砖组成。通常在最后一层之前,在两层之间绘制精灵党人物、NPC和其他一些东西 为了渲染它,我使用了一个批处理,有许多OrderedGroup:每个层一个组,每个精灵一个组 精灵的问题是,它们必须按y值的降序进行渲染,因此组的排列方式如下:假设贴图中有3个层,并且必须在最后一个层之前绘制2个精灵: g[0] = OrderedGroup(0) : first layer g[1]

我正在用Python+pyglet开发一个老式的2D RPG

地图由几层组成,最多10层,每层由32x32像素的正方形瓷砖组成。通常在最后一层之前,在两层之间绘制精灵党人物、NPC和其他一些东西

为了渲染它,我使用了一个批处理,有许多OrderedGroup:每个层一个组,每个精灵一个组

精灵的问题是,它们必须按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
将层精灵添加到批处理时,我指定它们是静态的。当我添加派对精灵时,它们是“动态的”

所以我的第一个问题是:既然它们都属于同一批,这不是矛盾吗?换言之,“静态”或“动态”是精灵对象的属性还是批的属性?注意:我知道我对OpenGL的了解很少,也不知道批处理和组是如何实现的

就目前而言,性能是正确的,我想要60 fps,我有最多8个移动精灵,但是如果有超过8个移动精灵,性能会迅速下降,这不应该发生在最后的游戏中,但是我希望我的引擎在不转换C/ASM中的部件的情况下尽可能地高效

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


提前感谢您的回答

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

你可以使用OpenGL

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

您提供代码

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

将图层贴图保留在单独的二维贴图中

那么您根本不需要任何排序/分组。若对象从一层转到另一层,那个么只需相应地更新展位层


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

你可以使用OpenGL

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

您提供代码

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

将图层贴图保留在单独的二维贴图中

那么您根本不需要任何排序/分组。若对象从一层转到另一层,那个么只需相应地更新展位层


也许这个问题更适合你。我也会在那里发帖的,对不起,交叉发帖。也许这个问题更适合你。我也会在那里发帖,很抱歉交叉发帖。