2011-07-07 84 views
11

我正在使用六角網格的TBS遊戲。不過,我想這是等距(看起來不錯,像素附庸風雅)和區塊引擎效果很好,這是結果: 在等距六角平鋪引擎中轉換屏幕到地圖座標?

然而,要實現這一點,我曾與值撥弄(平鋪尺寸,拼貼算法),以使拼貼正確。 以下是一個示例圖塊:

圖塊大小爲62x32,平鋪時,每個圖塊在x上移動47(cw),在y上移動16(ch)以正確放樣。

我這是怎麼計算的屏幕cordinates(用於繪製磚)從地圖座標:

function toScreen(x, y, z, offset) 
{ 
    offset = ifndef(offset, {x: 0, y: 0}); 
    var ret = new Vector2D(y*Tile.cw + x*Tile.cw -offset.x, -x*Tile.ch + y*Tile.ch -offset.y -z*16); 
    ret.y += (Tile.height*this.h)/2; //center the map on screen 
    return ret; 
} 

現在,我需要能夠選擇地磚,並獲得地圖從屏幕座標(鼠標)座標。我不知道是否有可能以某種方式轉換座標(我所有的嘗試都失敗了)。

這是地圖座標系統是什麼樣子,瓷磚如何繪製:

瓷磚的選擇,當然會,必須是像素完美的,但只是平瓦(不需要選擇超過上面瓦片的樹),所以算法可以假設所有的瓦片都是平坦的(就像我給出的例子那樣)。有沒有人有任何想法如何做到這一點?我可以通過將[0,0]處的圖塊轉換爲屏幕空間並查看指針是否在其中,或者距離它有多遠,然後緩慢地逐塊走動,直到找到包含鼠標座標的平鋪(或沒有平鋪),但是我正在尋找更優雅的解決方案(如果存在的話)。

有沒有人有任何想法?

謝謝。

+1

對於良好的結構化問題+1。 – Goles

回答

7

看看這篇文章的深度處理的六邊形網格:http://playtechs.blogspot.com/2007/04/hex-grids.html

有一個關於如何直角座標轉換爲六邊形座標的部分。通過添加額外的仿射變換將您的六邊形轉換爲正六邊形,您可以輕鬆地將他的方法調整爲「等張六邊形平鋪」。

+0

我正在尋找這樣的東西,但找不到它。這有點含糊,但解釋得很好。非常感謝你 :) – fingerprint211b