TiledMap渲染的谜之bug--已找到引擎引起bug的代码

测试后 cocos creator2.0.10、2.2.2、2.3.1、2.4.0-preview 均有此问题

测试后发现该bug和Camera的位置有关,当设计分辨率为480*320时,Camera的y>=384时,tile就会消失。Camera的y<=383时,tile就能正常显示。

通过getTiledTileAt(x, y, true)创建tile节点,然后改变这个节点position,让摄像机跟随移动,当设计分辨率设置的比较小,如480*320时tile会在移动到某个位置时消失,如下图所示

但当设计分辨率设置大一些,如960*640,就不会出现问题,如下图所示

demo文件
NewProject.zip (842.5 KB)

我记着好像tile出map父节点渲染范围后会不渲染,但是不是遮罩那种,应该就直接剔除了,你可以看一下你的Node范围在哪

tile移动没有出map节点,我上下两个只是改了设计分辨率,如果按你说的那种应该上下两个表现一致才对

Demo里具体的没看昂,就为啥会移动里面一个tile也没太懂,测了一下当tile的Y+自身高度/2(在设计分辨率外)就不渲染了,可能Demo里移动相机和tile逻辑和引擎判断冲突,引擎判断这个tile就是在屏幕外了


论坛秘术之召唤术@jare

项目中需要对某些tile进行移动,我测试后发现和tile的y没有关系,我固定camera不动后发现和camera有关,camera的y>=384的时候tile就消失了,camera的y<=383的时候tile就不会消失

已找到原因,在源码CCTiledLayer.js文件中的_updateCulling里根据cc.visibleRect对TiledLayer的渲染做了剔除
因为我改变了tile的位置,在cocos坐标系下它显然不应该被剔除,但_updateCulling剔除是根据tile在TiledMap坐标系下的位置去计算的。
所以这显然就是一个bug,既然引擎提供了操作tile坐标的方法,在剔除时就应该以tile在cocos坐标系的位置去剔除才对。