我想用 cocos2D 制作等距、基于瓷砖的 iPhone 游戏。
精灵需要绘制在它“后面”的其他精灵之上。我正在寻找最好的方法来做到这一点。
我想避免使用画家算法,因为它涉及对每一帧的所有精灵进行排序,这很昂贵。
GPU 和 cocos2D 支持 Z 缓冲区算法,所以这是我想使用的,但是有一个问题。一些精灵,例如建筑物,占据多个瓷砖。为这些精灵分配 Z 值很困难。
这些是我想到的选项:
- 比较两座建筑物并确定哪一座在“前面”很容易。因此可以对建筑物进行排序,然后根据排序顺序为其分配 Z 值。这与画家的算法没有什么不同。OpenGL ES Z 缓冲区将不是必需的。
- 仅根据其在地图上的位置(不知道其他建筑物的位置)为每个建筑物分配 Z 值。我觉得这很难。我认为这是可能的,但我还没有想出一个公式。
- 对占据多个图块的图像使用多个精灵,因此所有精灵的大小完全相同。然后可以根据精灵占用的图块轻松分配 Z 顺序。这个解决方案的问题在于它使游戏逻辑更加复杂。对于构成该建筑物的每个精灵,都必须重复对单个建筑物的所有操作。我想将每个对象视为一个实体。
- 修改 cocos2D 代码,允许精灵在不同的点有多个 Z 值。如果一个精灵可以根据精灵的特定部分落在哪个图块上具有多个 Z 值,那么计算该部分的 Z 值很容易。我不需要将精灵与任何其他精灵进行比较。我相信这可以通过为每个精灵使用多个四边形来实现。问题在于它对我来说有点复杂,因为我是 OpenGL ES 和 cocos2D 的新手。我并不完全理解所有内部数据结构是如何工作的。尽管如果找不到公式,这似乎是最优雅的解决方案。
我将对任何有用的资源的建议或参考进行投票。