我正在構建一個簡單的基於2D網格的遊戲,並且正在尋找一種方法來計算每個角色可以在遊戲板上施加的「威脅」區域。來自當前點的威脅很容易計算 - 這是下面的紅色鑽石。但我期待將這些信息與任意「可以在這裏走動」區域(橙色)結合起來。有沒有一種算法將威脅範圍與2D網格上的任意移動範圍結合起來?
算法一起會給我一個我角色可以從所有可用的移動和當前位置進行攻擊的所有圖塊的組合。
當然,我也只是遍歷所有可能的行動,運用菱形那裏,打造一個集所有威脅正方形的。有沒有更好的辦法?
我正在構建一個簡單的基於2D網格的遊戲,並且正在尋找一種方法來計算每個角色可以在遊戲板上施加的「威脅」區域。來自當前點的威脅很容易計算 - 這是下面的紅色鑽石。但我期待將這些信息與任意「可以在這裏走動」區域(橙色)結合起來。有沒有一種算法將威脅範圍與2D網格上的任意移動範圍結合起來?
算法一起會給我一個我角色可以從所有可用的移動和當前位置進行攻擊的所有圖塊的組合。
當然,我也只是遍歷所有可能的行動,運用菱形那裏,打造一個集所有威脅正方形的。有沒有更好的辦法?
你正在解決這裏的問題是類似於2D Convolution:
--------------- --------------- -------XX------
-------X------- --------------- ------XXXX-----
------XXX------ -------XX------ -----XXXXXX----
-----XXXXX----- * ------XXX------ = ----XXXXXXX----
------XXX------ --------X------ -----XXXXXX----
-------X------- --------------- ------XXXX-----
--------------- --------------- --------X------
在你的情況,其中一個元件被僅任一覆蓋或未覆蓋(相對於含有標量或矢量值),這樣可減少到Dilation形態學操作。有許多論文和代碼樣本可以有效實施擴張 - this one看起來特別適用於您的問題。
這正是我正在尋找的。該算法的名稱是「由K擴張」 –
難道你不能將鑽石形狀應用到你知道玩家可以走到的瓷磚上嗎?您仍然必須執行「遍歷所有可能的」過程,但它會明顯限制您必須解析的切片。除非我錯過了什麼 – jraede
所以,你真的只需要擔心邊緣移動,對吧?最外面的正方形?繪製原始鑽石後,遍歷所有「canMoveTo」正方形,但不是遍歷整個菱形,而是遍歷邊界正方形。 – nhgrif
@nhgrif:不,因爲你的移動範圍可能比你的武器範圍更長。只檢查邊框可能會在顯示的威脅區域中間留下一個大洞。 – user2357112