You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 11:18:37