从PNG地图创建图表

时间:2016-07-26 11:32:34

标签: java algorithm image-processing

我有一张地图,上面有涂有一种特定颜色的通道,人们只能在这些通道上行走 - 所以任何其他颜色都是障碍。是否有任何工具/库/算法可以从这种地图创建图形?

1 个答案:

答案 0 :(得分:1)

没有必要使用库或工具来构建它。手头的任务足够简单,足以证明新实施的合理性。

下面我将概述为完成此任务而构建的组件,特别强调它们的职责范围很小。

图[T]

该图表示节点集合中节点对之间的二元关系。 T表示与这些节点关联的有效负载 - 在您的用例中,表示图像的像素坐标。我们不会假设图表是定向的还是非循环的或类似的东西。

节点[T]

图表中的单个节点。它具有T类型的通用有效负载和名为GetNeighboringNodes的方法。

<强> PassageGraphBuilder

此课程负责从Graph<PixelCoordinates>中创建Image。它包含Color表示给定Image内的段落的配置,以及哪个方向性(仅上/下/左/右或对角线?)允许连通性。

它通过为Node<PixelCoordinates>中的每个像素创建Image来执行此任务。然后,它通过检查Image中每个相邻像素的颜色来创建这些节点之间的关系。

<强> WorldToGraphMap

此组件负责将世界坐标映射到像素坐标。这允许您的世界规模独立于用于驱动它的数据。它有GetWorldCoordinatesForNodeCenter(Node<PixelCoordinates>)GetNodeForWorldCoordinates(WorldCoordinates)等方法。

然后你可以......

最后,您可以执行以下操作:

  • 为玩家输入新的所需位置(以世界坐标表示),可能是由控制器输入驱动,
  • 调用GetNodeForWorldCoordinates(WorldCoordinates)以确定图表中新位置对应的节点
  • 检查播放器的当前节点,以确定这两个节点是否为邻居:
  • 如果新节点是旧节点的邻居,则允许移动;
  • 否则,不允许。

当然,构建一个真正的navmesh还有很多其他的复杂功能,但这应该可以帮助你解决这个用例。