我有一些問題讓我的遊戲運行算法,並希望有人在這裏可以幫助我。谷歌似乎不是一個很好的幫助,因爲大多數解決方案只適用於全瓷磚。在遊戲中,單位可以佔據瓦片內的不同位置,即它們可以位於瓦片(2/3)的左上角,中心,右下角......位置,即(2.2/3.1), (2.5/3.5),(2.8/3.9)。C#:2D子平鋪線相交
如果他們從位置(2.2/3.1)移動到(5.7/4.1),我需要檢查路徑中是否存在障礙物。
我的當前的算法是:
- 從(2.2/3.1)
- 開始計算移動的角度(即70度)
- 移動0.1步驟在該方向
- 檢查哪個瓦片我是上(地板(PX)/地板(PY))
- 重複從2
這個算法可行,但對我而言,它看起來效率並不高,因爲障礙只能是一個完整的瓦片,而不是瓦片的一部分(單元不會相互碰撞)。如果我增加步長,我開始錯過只是稍微穿過的貼圖(即,你只穿過最左下角)。即使步長爲0.1,仍然有可能錯過障礙。
我試圖找到一個解決方案採取子地圖(所有瓷磚與角落(樓(start.X)/樓(start.Y))和(ceil(start.X)/ ceil(start.Y )),遍歷每個瓦片,並在數學上檢查它是否越過。可悲的是,我似乎缺乏這項檢查所需的數學知識。
我最後的想法是將瓦片的所有4個邊界作爲一條線並做一條線-intersection但似乎比我原來的做法更慢。
任何提示?
感謝。
優秀的答案,謝謝。我會盡快接受它(還剩13個小時) – dbemerlin 2010-05-06 16:18:07
確實!這非常聰明。我試圖實現它,但我找不到一種方法來編碼第四步(我無法找到完美的if/else條件來決定哪個是新的比較點)。你還記得那個算法的名字,所以我可以找一個實現的例子嗎? – XPac27 2011-03-08 08:56:27