2008-12-04 26 views
2

我對此沒有經驗,所以我懷疑我的邏輯過於複雜,或者可能沒有完成足夠的工作來完成我想要的任務。建議邏輯處理瓷磚系統上的自由運動

我有一個基本的基於圖塊的系統,但想要以連續的方式在地形上移動單位。現在他們正在從一個瓦片「傳送」到另一個瓦片。

我已經有很多設置瓦系統上,對於像尋路,覆蓋,地形類型的遊戲邏輯等

我的第一個猜它有一個浮點的x/y偏離單位的中心和瓷磚的中心,0.0位於中心,1.0位於邊緣。這將是單位重疊的每個瓦片。然後,我可以通過數學計算出單元「最」的那個圖塊,並將該圖塊用於尋路邏輯。

爲了使它更好,隨着單位的移動,我會讓它調整偏移量,讓他逐漸將自己定位在平鋪線上,而不是讓一堆90 *回合擊中路徑的平鋪。然後,我可以做一些花哨的東西,讓他曲線優雅的曲線。

對於像wepon距離這樣的事情,我可以使用x/y平鋪距離,然後將x/y偏移量分開以獲得簡單的pathagorean距離。

什麼是一種成功的方式將運動與瓦片分離,並且仍然能夠將單元「鏈接」到瓦片上?

+0

它可能會有助於知道它是基於回合還是實時。 – 2008-12-04 20:38:59

回答

3

從你的問題中不清楚,但是我的方法I將根據您的遊戲是2D還是3D來使用。

對於2D遊戲,您最好使用像素作爲座標。這樣,您可以使用整數來存儲它們,使事情變得更加美好和簡單。您可以通過將座標除以圖塊大小來輕鬆確定單元所在的圖塊。

對於使用拼貼的3D遊戲,只需使用浮點數作爲座標系。如果你正在考慮像武器範圍這樣的東西,將單位保持在「瓦片」中可能是最容易的。

無論您使用哪種系統,請自己幫忙,並將一個位置的轉換位置置於您的代碼中。如果你只是因爲當前瓷磚大小爲100而亂拋垃圾/ 100和* 100,它最終會回來咬你。用一個叫做TILE_SIZE的常量代替「100」可能不是最好的方法,因爲完全可能的是,在某個地方你會想要爲兩個座標系使用不同的原點。

一旦你的單位可以在瓦片內移動,你的路徑發現問題就會變得更加複雜。即使所有單位的尺寸相同,但當相鄰瓷磚不可通行時,您可能需要確保它們不會靠近邊緣。我建議你將所有的路徑保留在tile-space中,並且後處理路徑以消除所有不必要的45度轉彎。

1

您還可以指定某個整數大小的磁貼。說每個瓷磚是100x100。所以你堅持使用整數而不是浮動。查找你/玩家所在的平鋪區域同樣微不足道,仍然基於整數。

+0

想到這種方式使得它看起來像本地單位具有較高的瓷磚分辨率,但全球範圍內它有一個較小的分辨率。 – 2008-12-04 19:46:53

1

最簡單的方法就是使用浮點座標,然後繞到最近的整數以得到正方形。

(3.141592, 2.718282) -> (3, 3) 

爲了讓廣場內的像素位置上,你只需要乘的分數部分的與瓷磚大小,向最接近整數座標:(假設100×100瓦)

(3.141592, 2.718282) -> (0.141592, 0.718282) -> (14, 72) 
+0

所以它將在像素14,72的瓦片3,2? – 2008-12-04 19:51:36

0

爲什麼不只是讓玩家進入瓷磚? 當他們想從平鋪A移動到平鋪B時,開始沿平鋪方向移動玩家。當它們距瓷磚中心合理的距離內時,就遊戲邏輯而言,您可以切換玩家所在的瓷磚。

所以......

玩家開始從瓷磚的移動到瓷磚B.如果不是所有的遊戲邏輯是瓷磚依賴(如效果的武器傷害,區)仍然會影響到玩家如果損壞處理到平鋪A.當玩家在平鋪A的中心和平鋪B之間的中途,將玩家的實際平鋪位置切換到平鋪B.

+0

這個想法是從更小的單位運動中分離較大的瓷磚... 我可以這樣做,通過爲單位移動設置一個較小的瓷磚,將它放置在較小的瓷磚之間來實現它。感謝這個想法。 – 2008-12-04 19:57:34

+0

你會有一層較大的瓷磚,在每個瓷磚中會有一層較小的瓷磚,這樣玩家可以更順利地在瓷磚中移動?你可以很容易地應用相同的概念。你正在使用某種路徑查找算法,或者你正在進入目錄。一塊瓷磚? – 2008-12-04 20:04:43