gpt4 book ai didi

python - 平铺 map 和 Sprite : am I doing it the right way?

转载 作者:太空宇宙 更新时间:2023-11-04 06:35:41 25 4
gpt4 key购买 nike

我正在使用 Python + pyglet 开发老式的 2D RPG。

map 由多个图层(最多 10 个)组成,每个图层由方形图 block (32x32 像素)组成。 Sprite (派对角色、NPC 和其他一些东西)绘制在两层之间(通常在最后一层之前)。

为了渲染它,我使用了一个批处理和许多 OrderedGroups:每层一个组,每个 Sprite 一个组。

Sprite 的问题在于它们必须按照 y 值的降序呈现,因此组排列如下(假设 map 中有 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

当我将图层 Sprite 添加到批处理时,我指定它们是静态的。当我添加派对 Sprite 时,它们是“动态的”。

所以我的第一个问题:因为它们都属于同一批,这不是矛盾吗? (换句话说:'static' 或 'dynamic' 是 sprite 对象的属性,还是 batch 的?)/p>

目前,性能是正确的(我想要 60 fps,我有最多 8 个移动 Sprite ),但是超过 8 个移动 Sprite 时性能会迅速下降(这在最终游戏中不应该发生,但我我希望我的引擎在不翻译 C/ASM 部分的情况下尽可能高效。

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

预先感谢您的回答

最佳答案

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

  1. 您使用 OpenGL

    因此您不需要任何 Y 和/或 View 平面排序渲染。 Z-Buffer 会为您做这件事,因此绘制顺序可以是任意的...除非您使用透明瓷砖(在那种情况下您别无选择)。

  2. 您提供代码

    但它实际上什么也没说,请确保您没有在渲染中对任何内容进行排序/分组。似乎您在每一帧上都创建了有序列表,这会非线性地影响性能。通常对于硬件加速代码来说一切都很好,直到你遇到一些关键的瓶颈然后它突然变得糟糕!!!

  3. 在单独的 2D map 中保留图层 map

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

关于python - 平铺 map 和 Sprite : am I doing it the right way?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11567039/

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