首先最基础的你得学会遍历tilemap
用get_used_rect,for i:for j:get_cell,你就能获得一个tilemap上所有tile的id信息(而不需要先绘制出来缩小再截图),也就能把这些信息全部绘制在一个tileset不一样的另一个tilemap上(这样你也不需要用到viewport就能做出一个大地图和一个小地图了)
你需要自己去看TileMap的API,这样你才知道tilemap都能用来做些什么。
![](http://tiebapic.baidu.com/forum/w%3D580/sign=601da0dede504fc2a25fb00dd5dce7f0/ccbaef039245d6889b0c9e72e1c27d1ed31b24a4.jpg?tbpicau=2025-02-25-05_9345c4eea2bdcaf7d341a01bd0b185c8)
但很可惜的是,这样绘制出来的小地图性能很差,很卡很卡。如果可以的话,把小地图存在图片上比存在tilemap上要合理地多。以下是Image的API,这个重点你至少得学会。学会了你就能在_ready()的时候把整张图存下来,在角色移动的时候根据角色轨迹动态地存下来。
![](http://tiebapic.baidu.com/forum/w%3D580/sign=fedcd7fdd816fdfad86cc6e6848e8cea/1492be6eddc451dad8f8203df3fd5266d11632a4.jpg?tbpicau=2025-02-25-05_58f02d270183a2d35f0d885acd17c98e)
然后是ImageTexture的API……Image是没法直接扔给节点画出来的,要经过这个中间步骤;
![](http://tiebapic.baidu.com/forum/w%3D580/sign=a1c9b6b7b6deb48ffb69a1d6c01e3aef/5e9d92cb39dbb6fd0e55c9f04c24ab18962b37a4.jpg?tbpicau=2025-02-25-05_bf9549f242944c3aa603b07e99c59067)
紧接着是Control的API,ImageTexture很适合添加给TextureRect作为纹理,然后TextureRect继承自Control,有这些相关的处理鼠标输入的方法;
![](http://tiebapic.baidu.com/forum/w%3D580/sign=ebbc95b2d1eef01f4d1418cdd0ff99e0/b9ba4166d0160924f42b8ecd910735fae7cd34a4.jpg?tbpicau=2025-02-25-05_97f0601b43be5fdbe84b1d592bfd4854)
不想用Control的_gui_input()也可以直接用简单的Input算了,输入这一整章文档都可以看一看啊。
![](http://tiebapic.baidu.com/forum/w%3D580/sign=5f2b2f9c9fb44aed594ebeec831d876a/0c7c48b5c9ea15ceefe0ccdff3003af33b87b2a5.jpg?tbpicau=2025-02-25-05_9417237ce056d429a3824417ce7e2fb7)
看了这些,最后也还是需要你自己做好计算打好代码,算出来点击哪里对应于传送到哪里。然后关于传送和点击位置的对照信息,可以直接用dictionary啥的存下来,也可以类似于存轨迹那样用颜色来保存。