2010-09-28 73 views
0

我有一個基於瓷磚的遊戲,我需要找到距離爲32px半徑內距離最近的瓷磚。所以說用戶在400, 200和用戶點擊500, 400。我需要在點擊時創建從播放器到鼠標位置的路徑或線條,並且必須選擇32px(或2個圖塊)內路徑下方最近的圖塊。該地圖平鋪在16px找到沿路徑最近的瓷磚

函數調用,看看瓷磚是在給定的瓷磚可用的位置Map.at(x,y)

我只是不知道用數學來解決這個問題。

alt text

的塊的塊是16像素以內,紅色是32PX內。灰色塊是要破壞的瓷磚,藍色線是玩家和鼠標之間的不可見路徑。

+0

「最近的瓷磚」是什麼意思?用戶點擊的實際圖塊有什麼問題? – Kylotan 2010-09-28 11:25:00

+0

瓷磚只有16px x 16px,因此不容易瞄準。與玩家對準鼠標位置最近的貼圖。 – Louis 2010-09-28 12:19:03

回答

1

如果您按照拼貼座標工作,則問題會從用戶所在的標題變爲線條繪製問題,鼠標被點擊進來。線條繪製算法會依次生成所有拼貼沿着這兩個瓦片之間的直線路徑。只需選擇第一個Map.at(x,y)滿足您的要求並退出抽屜。

存在許多線條繪製算法。兩個簡單的是DDABresenham's。都以正確的順序生成離散的「像素」(在你的問題中的瓷磚)。如果您的應用程序可以使用浮點運算,則DDA是一個簡單的選擇。 Bresenham's只使用整數數學。

Generated tiles on path

+0

近,工作。對於負梯度,它似乎不太適用。 – Louis 2010-09-28 06:11:11

+1

它應該對任何漸變都完全相同。 – Kylotan 2010-09-28 11:24:09

0

擁有大量的遊戲,這是沒有必要的直線,而是最短路徑的搜索。如果這就是你要去的地方,那麼你可能想看看the A* algorithm

+0

雖然這是一條直線。從玩家直接點擊鼠標位置。我基本上只需要找到最近的瓷磚,接近鼠標位置。 – Louis 2010-09-28 06:23:05