2016-07-26 70 views
0

我有一張地圖,上面有一段用一種特定顏色繪製的段落,人們只能走在這段經文上 - 所以其他顏色是障礙。有沒有任何工具/庫/算法,允許從這種地圖創建圖形?從PNG地圖創建圖形

+0

當你創建一個這樣的遊戲時,你應該使用[model/view/controller pattern](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) 。該模型將包含創建您的地圖和創建圖形的信息。 –

回答

1

不需要任何庫或工具來構建它。手頭的任務非常簡單且足夠獨特,足以證明新實施的合理性。

下面我概述了我將爲完成此任務而構建的組件,特別強調它們的狹義職責。

格拉夫[T]

該圖表示節點的集合中的節點對之間的二元關係。 T代表與這些節點相關的有效載荷 - 在您的使用情況下,圖像的像素座標。我們沒有假設圖是否是定向的或非循環的或類似的東西。

節點[T]

在曲線圖中的單個節點。它有一個類型爲T的通用有效載荷和一個稱爲GetNeighboringNodes的方法。

PassageGraphBuilder

這個類是負責創建Graph<PixelCoordinates>Image的。它包含的配置Color代表給定Image內的一個段落,並且其方向性(剛好向上/向下/向左/向右或對角線以及?)允許連通性。

它通過爲Image中的每個像素創建一個Node<PixelCoordinates>來執行此任務。然後通過檢查Image中每個相鄰像素的顏色,創建這些節點之間的關係。

WorldToGraphMap

該組件映射世界的責任座標到像素座標。這可以讓你的世界的規模獨立於驅動它的數據。它有像GetWorldCoordinatesForNodeCenter(Node<PixelCoordinates>)GetNodeForWorldCoordinates(WorldCoordinates)的方法。

然後你可以...

最後,你可以做到以下幾點:

  • 作爲輸入一個新的理論位置(在世界座標)的球員,大概是通過控制器驅動輸入,
  • 呼叫GetNodeForWorldCoordinates(WorldCoordinates),以確定新的位置對應於圖中的節點,
  • 檢查玩家的當前節點,以確定是否兩個節點neighb或者:
  • 如果新節點是舊節點的鄰居,則允許移動;
  • 否則,禁止它。

當然,還有很多複雜的構造一個真正的導航網格,但這應該讓你去這個用例。