就像这样
和这样![]()
狗在前面的时候能把熊挡住,而狗走到后面的时候能被熊挡住
目前有两个想法,一个是像RM那样
,让部分图块有更高的优先级,在tiledmap里把高优先级的图块放到一个单独的图层,再让这个图层比角色优先级高就好了,但是像熊这样只有一个图块大小的就需要把它的头截下来强行分成两个图块.
而另一个想法就是只有一个图块大小的物体不在tiledmap里面处理,而是放在ccc里面作为一个节点,然后根据主角和节点的y轴大小随时调节zorder,
请教一下有没有更好的方法,或者说强行分成两个图块和随时调整zorder哪个方法更好(主要是针对只有一个图块的物体)
呃…能不能把你的需求描述更清楚一些。比如:现在要调整的节点是 layer 里的某个 Tile?还是说在 Creator 中添加到地图中的一个节点?另外,你是要实现这个节点与同一层中的 tile 遮挡关系动态变化?还是说与不同层的遮挡关系动态变化?
你的第二个想法是对头的,需要把动态物体从 tilemap 中拿出来单独放在一个节点下面控制,然后根据物体之间 y 轴坐标的大小关系,动态改变 zOrder 排序
首先要保证每个物体的锚点都在该角色脚部的位置,然后每一帧固定的周期内(比如 lateUpdate 里)对同一父节点下的所有动态子物体通过 y 坐标进行排序,排出顺序后再依次赋值这些物体的 zOrder。
需求就是,主角在物体前面会把物体挡住,主角在物体后面会被物体挡住(那两张图里面狗是主角,熊是物体)
要做出这样的效果
其他的那些是我个人对于实现这个效果的一些想法,第一个想法是在Tiledmap里进行处理,把高优先级的图块(就像书柜的顶部)在Tiledmap里单独放到一个图层里,然后在ccc那边让这个图层有比主角更高的显示优先级,但是对于只有一个图块大小的物件我就只能强行把他分成两个图块,比如把熊的头单独放到优先级更高的图层里,把身体放到普通图层里(显示优先级是高优先级图层>主角>普通图层)
第二个想法是,有多个图块的物体按第一种方法,对只有一个图块的不在tiledmap里面处理,而是在ccc里面新建一个node,然后设置成精灵,接着根据这个node和主角的y轴大小随时更改zorder
请教一下为什么要在脚部,如果全部都在0.5,0.5的位置的话应该对 比较结果没影响的吧.
我做过这种根据Y坐标动态更改zOrder,nantas说得没错,应该根据脚的位置判断,这更符合视觉常识。你想像一下一个高个子站在矮个子前面(脚部Y值小于矮个子脚部Y值),应该挡住矮个子。如果根据0.5,0.5的位置判断,高个子的腰部Y值可能比矮个子腰部Y值还要大,就显示到矮个子后面去了。
原来如此,我现在拿rm的素材暂代的,所以全都是32*32,没有这个问题…
另外请教一下,像RM游戏那样有几十个地图的话,是用几十个场景比较好,还是一个场景配几十个地图创建的脚本比较好…
后者的话布置起来挺麻烦的…