我正在开发一个基于地图的iOS/Android游戏。
我尝试了几种雾障(fog-of-war)实现,但一直遇到性能、渲染或用户体验问题。为了避免再花一周重写它,我想知道经验丰富的地图/游戏开发者会推荐哪种方法。

我尝试的方法

1. SVG屏幕遮罩
雾障渲染为SVG在屏幕空间中
与地理坐标无关
问题:
移动独立地移动时,移动时不会停留在你的角色上

2. 一整块地图多边形和圆形孔
整个视口覆盖一个多边形
圆形孔切出已发现区域
问题:
GPS圆圈与道路或探索模式不符
缩放变得不方便
孔管理变得混乱

3. 分块网格,每块一个多边形
存储在AsyncStorage中的方块网格
当GPS更新时,显示附近的块
渲染未发现的块的多边形
问题:
数百个多边形
Google Maps渲染偶尔会出现问题
顶点顺序错误导致巨大的黑色矩形
当放大时,性能会下降

4. 分块网格v4(当前)
一个大的视口多边形
方块孔切出已发现块
AsyncStorage持久化
块大小约为0.001度
我想我破坏了几乎所有东西
加载雾障花了很长时间,有时我的图标也不会加载。

我的目标
永久性探索/发现
在整个城市(和最终更大的区域)工作
平滑的移动和缩放
不需要每帧渲染数千个多边形