請教Isometric類型TiledMap的座標轉換方式

各位大神,不好意思,

目前我有一張這樣的TileMap:

反覆試了好多次,也得不出結果,請求大神們給點思路

我現在僅有的知識為…

var layer = tiledmap.getLayer( 'Ground' ); //這樣是取得Layer
var getBlockPosition = layer.getPositionAt( 0, 0 ); //這樣是取得 x=0, y=0 的像素座標

但是這樣,
我無法從 cc.Node.EventType.Touch_End 這種事件中,
將觸摸的position轉換為 瓦片 的 x, y

我現在想的是…
或許我可以用一個陣列把所有的像素座標記下來

var blockArrays = [];
for( var idX = 0; idX < map.getMapSize().width ; idX++ )
{
   for( var idY = 0; idY < map.getMapSize().height ; idY++ )
   {
      var pos = layerGround.getPositionAt( idX, idY );
      var blockInfo = { X: idX, Y: idY, PositionX:pos.x, PositionY:poxy };
      mapSizeInfo.push( blockInfo );
   }
}

然後觸摸時再去找出它是哪一個瓦片,
不過…這樣顯然是笨到家了… 效能會很差的吧?

請大神們給點思路,感激不盡

@RazgrizHsu
我查看了 TiledLayer 对应的渲染节点的实现,确实没有相应的接口实现。应该是 TiledLayer 底层实现一直缺失这个功能。

我已将此问题记录下来,后续进行实现。带来不便请谅解。

不推荐这样做。应该可以做一个算法,通过坐标计算所在的瓦片。引擎中如果要实现相应的功能也肯定是通过算法来实现。

1赞

感謝回應,
我已經成功用算法將45度地圖取瓦片實現了
謝謝你們辛苦的付出 :slight_smile:

1赞

请问大神是用什么算法将45度的tiledmap的像素坐标转换成瓦图坐标的