TileMap无法获得tile

tileLayer.getTiledTileAt为何无法获得某一个矩阵坐标的tile。返回都是undefined。



TestTileMapProject.zip (189.0 KB)

我看了论坛上官方的回复。说是forceCreate用true。可是明明瓦块已经显示。为什么还要create。

遇到过 forceCreate只能传 true,

如果只能传true。那这API有啥意义。我估计是bug。

目前tileMap 的getTiledTileAt会判断在指定序列上_tiledTiles中是否已有tiledtile,有就输出,没有的话依据是否创建新的tiledtile(forceCreate)参数,执行相关代码。
你的项目中本来就没创建过tiledtile,所以这个逻辑在你项目上表现是正常的。
你可以通过setTiledTileAt (x, y, tiledTile)先创建一个,或者参考getTiledTileAt中的逻辑创建新的tiledtile,那么之后你getTiledTileAt()穿false就有东西了。
https://github.com/cocos-creator/engine/blob/7b574ee4f67dd3d56d321cf3a749aaa7845bced2/cocos2d/tilemap/CCTiledLayer.js#L328

tiledtile从字面意义上看。不就是瓦块地图上的一个瓦块么。我不理解为何我的瓦块地图添加进场景中,也可以正常显示所有的瓦块。为何还要创建每一个瓦块。麻烦您告知。:slight_smile:

明白了 感谢。就是说。瓦块地图上虽然显示了纹理。但是并没有关联到对象。所以需要程序猿创建个TiledTile的实体对象,然后给tilemap,然后才可以取。

这个API设计的真的 RuoZhi 我知道原来的TMX里是没有实例的 但是说明文档里也没说清楚 让开发者自己去猜 正常人都 按照
MAP - LAYER - TILED 这种去获取 结果到这一步发现获取不到了

1赞

大家看看

用了这个后
let tile1 = testdd.getTiledTileAt(0, 1, true);
let tile2 = testdd.getTiledTileAt(1, 0, true);

什么逻辑啊本以为会,获取到相应的tile
testdd.getTiledTileAt(0, 1);为空, testdd.getTiledTileAt(0, 1, true);直接把原有的弄没了,老铁厉害了

坐标处若有tile,getTiledTileAt传入false,返回的就是undefined;传入true,则原有的tile就没掉了,搞啥哦!
这么简单的api都能有bug,实习生做的吗?这个api现在就是没法用了

就是说,当一个tilemap创建好后,其中每一片tile其实都还是不有的。要用的话要现create…这个不符合人的自然思维习惯啊。为什么明明我能看到,却取不到。如果说为了性能考虑,全部不主动创建,只在实际用到的时候才生成,那在取的时候就不要给什么是否force create的参数了。全部第一次用的时候create…

我记得最底层的地面图块,就是0,你map里用另一个图层在地面上放东西,就有返回gid了

要的是Tile对象啊,一个id有啥用

大神们 谁解决了???

我都崩溃了… 想了好久 … 闭眼就想这是为啥…

如果我自己创建tiled 我还用tiledMap 干啥? 我自己计算好了 … 用这东西 就希望 直接绘制地图 这里居然要自己重新创建 我是佩服 …

我自己思考了一下 … 今天感觉这个问题也不是啥问题了!!!

getTileGIDAt 用这个 判断是否为0 就可以了 …
getTiledTileAt undefined 就是 他们本身可能是为了减少内存压力 而没有初始化 …

对上面的言论 表示歉意 …

1赞

你好,请问一下你所说的,setTiledTileAt (x, y, tiledTile)中的tiledTile是个什么参数呢?如何获得自己需要的纹理的tiledTile?

你好,问题解决了吗?请问一下,如何获取某个图块单独设置它的层级呢?
如果是重新创建一个tile,所用的setTiledTileAt (x, y, tiledTile)中的tiledTile是个什么参数?如何获得自己需要的纹理的tiledTile?