MapBox Android SDK是否支持在Polygon中绘制重叠孔洞?
安卓位置策略游戏战雾实现问题:MapBox是否支持重叠/贴边的多边形孔洞
我正在开发一款安卓平台的位置策略类游戏,战雾系统的设计逻辑如下:
- 地图初始为全黑暗不可见状态
- 玩家建造雷达站后,会解锁对应范围的地图可见区域
- 其他建筑、玩家单位也会通过视线计算,提供对应范围的视野
我此前采用的实现方案是:渲染一个覆盖全球范围的半透明黑色多边形,在每个视野提供点位对应的位置挖孔,以此实现区域点亮效果,目前已经跑通基础逻辑,效果示例如下:
但这套方案在Google Maps上存在无法解决的问题:
- 如果作为点亮区域的孔洞互相重叠
- 如果孔洞触碰地图边界
Google Maps会直接清除整个多边形的填充,导致全地图直接变为可见状态。
Google官方已经明确说明,当前Google Maps的多边形组件既不支持多边形内的重叠孔洞,也不支持与地图边界重叠的孔洞。我目前在调研各类可行替代方案,首先想确认MapBox是否具备满足该需求的能力。
以下是我当前绘制带孔洞战雾多边形的参考代码:
List points = Arrays.asList(new LatLng(90, -180), new LatLng(-90 + delta, -180 + delta), new LatLng(-90 + delta, 0), new LatLng(-90 + delta, 180 - delta), new LatLng(0, 180 - delta), new LatLng(90 - delta, 180 - delta), new LatLng(90 - delta, 0), new LatLng(90 - delta, -180 + delta), new LatLng(0, -180 + delta)); PolygonOptions fogOfWar = new PolygonOptions(); fogOfWar.addAll(points); fogOfWar.strokeWidth(0); fogOfWar.fillColor(0x80000000); // 预期效果为50%透明度黑色 for(Structure structure : game.GetAllStructures()) { if(structure instanceof RadarStation) { RadarStation radarStation = ((RadarStation)structure); if(radarStation.GetOwnedBy(game.GetOurPlayerID()) && radarStation.GetOnline()) { List<LatLng> hole = new ArrayList<LatLng>(); for (int i = 0; i < 360; ++i, d += p) { hole.add(SphericalUtil.computeOffset(Utilities.GetLatLng(radarStation.GetPosition()), radarStation.GetRadarRange() * 1000, d)); } fogOfWar.addHole(hole); } } } map.addPolygon(fogOfWar);
内容的提问来源于stack exchange,提问作者user19113197
相关产品推荐
相关产品推荐

