最佳Z基于Tile,Cocos2D-iPhone游戏的订购方法吗?
-
12-11-2019 - |
题
我想用cocos2d制作等距,瓷砖,iphone游戏。
精灵需要被绘制在其它精灵的顶部,这些精灵是“后面”。我正在寻找最好的方法。
我想避免画家的算法,因为它涉及对每个帧的所有精灵进行排序,这是昂贵的。
GPU和Cocos2d支持Z缓冲算法,因此这就是我想使用的,但存在问题。一些精灵,例如建筑物,例如,占据多个瓷砖。将z值分配给这种精灵很难。
这些是我想到的选项:
- 比较两个建筑物并确定哪一个“在前面”是 简单。所以可以对建筑物进行排序,然后基于的z值分配 排序顺序。这与画家没有任何不同 算法。 OpenGL ES Z缓冲区是不必要的。
- 将z值分配给每个基于每个建筑物的位置 地图(没有其他建筑物的知识)。我是 找到这个困难。我认为这是可能的,但我没有 能够提出一个公式。
- 使用多精灵占用多个瓷砖的图像,所以 所有精灵都是完全相同的大小。然后可以是z订单 基于Sprite占用的瓷砖易于分配。这 这个解决方案的问题是它使游戏逻辑更多 复杂。一栋建筑物上的所有操作都必须是 对建筑物的每个精灵重复。我想 将每个对象视为一个实体。
- 修改Cocos2D代码以允许精灵具有多个Z值
在不同的观点。如果Sprite可以基于的Z值
什么瓷砖的雪碧的特定部分落在,然后计算
该部分的z值很容易。我不需要比较
闪耀到任何其他精灵。我相信这是可以使用的
每个精灵的多个四边形。这是它的问题
因为我是OpenGL ES和Cocos2D的新手,对我来说有点复杂。一世
不要完全了解所有内部数据结构的方式
工作。虽然如果公式似乎是最优雅的解决方案
找不到。
我会备注到有用资源的任何建议或引用。
解决方案
for#2,您可以计算对象中心的曼哈顿距离,并使用此值作为该对象的z值。只要您在地图中避免像5x1对象或更糟糕的地图中避免非常长的对象,它就会起作用。但是如果您真的需要将长对象放在瓷砖地图中,通过使用公式设置z值来管理地图中的对象的z序列是不可能的。
为了证明这一点:
1.)水平地图中的两个2x2对象在地图中放置,并在它们之间留下单位块。
2.)在它们之间放置3x1对象。让我们将2x2对象命名为a和b,以及3x1对象到C.
3.)如果您只需旋转C(不会改变其位置),Z-Order A和B交换。
-if b现在在前面,b后面的一些物体将在a前面前面,因为只有c的旋转。c旋转后。
不隶属于 StackOverflow