TiledMap遮挡问题

TiledLayer使用addUserNode添加了两个元素,目前两个元素的遮挡关系是跟x坐标也有关系,能否设置成只跟y坐标有关?
正常:

x坐标影响:

你说的这两个情景,两个User Node都是在同一个Tile吗?还有就是地图的渲染顺序是什么?

都在同一个TiledLayer上面,渲染顺序是右下,这是代码:

    let player = cc.instantiate(this.playerPre);
    player.x = 299;
    player.y = 268;
    this.obstacleLayer.addUserNode(player);
    
    let felt = cc.instantiate(this.feltPre);
    felt.x = 289;
    felt.y = 260;
    this.obstacleLayer.addUserNode(felt);

发现一个规律,在初始化的时候添加人物和火盆,人物在火盆的右上方,火盆遮挡人物,正常。
当我改变人物的y坐标,向下移动一段距离,人物再向上移动回到初始化的位置,人物遮挡了火盆,显示顺序不对了。

你说的这个右上方是视觉上的右上方,还是指人物所在的Tile在火盆所在的Tile的右上方?视觉上右上方并不代表Tile坐标右上方,因为假设User Node的锚点在左下,那么就可能看起来人物在火盆右上,但实际上还在同一个Tile的情况。
在同一个Tile时,User Node的遮挡顺序是后来的会遮挡之前的。
所以,你说的这种情况有种可能是,人物和火盆都在同一个Tile,初始时,后添加的火盆会覆盖人物。当人物移动再回来之后,就会覆盖火盆了。
如果确定不是同一个Tile,那就要看你是不是通过设定刚体的速度来移动的人物,如果是的话,目前这种方式移动后不会更新遮挡关系,需要手动更新。

右上方指的是xy坐标,人物的xy坐标都大于火盆的xy坐标,看上面贴的代码。
人物移动我是通过修改坐标来实现的:
this.node.x += this.dx;
this.node.y += this.dy;
另外请教一下,如果需要手动更新显示顺序,是调用什么api啊?

遮挡关系不是看像素坐标,而是看Tile坐标的:


所以,先要确定是不是在同一个Tile坐标。
如果是刚体移动导致的无法刷新才需要手动更新User Node,不然是不需要的。

1赞

嗯,知道原因了,我添加的xy坐标不在Tile坐标的中心位置。在Tile坐标边界上导致的,感谢

请问你是如何对齐的呢?同样的问题