2012-03-21 108 views
2

我有一個腳本就位和運行,允許我沿着路徑移動圖像,但是我的路徑在大約6次移動後走偏(在六角形地圖上)。帆布翻譯例程沿六角形路徑移動

我知道有一個函數來處理這個,但現在我無法找到該做什麼。目前,我正在使用x和y移動的設置浮動值,它們不是向上或向下移動(0度和180度),而是設置的整數值。

這裏是我的僞代碼:

function doTranslate(deg, goX, goY) { 
    clearCanvas(); 
    var context = surface.getContext('2d'); 
    context.save(); 
    context.translate(goX,goY); 
    context.rotate(DegToRads(deg)); 
    context.drawImage(gamePiece, -10, -10); 
    context.restore(); 
} 

再次,這所有的作品,但我的計算GOX和戈伊值是獲得基於我們前進的方向更新的全局變量。 現在,我的x移動使用了18.3的浮點數,我的y移動使用了9.8的浮點數,並且我的直線移動或下移移動的int值爲21。

我記得大學時(只是模糊地)我需要在那裏做一些平方根和PI操作,但現在我只是爲每個移動添加和減去靜態值。

有沒有人已經解決了這個問題?

回答

3

要移動六邊形網格上的東西,它必須遵循這些基本單位。

position graph

說得半僞代碼:

s = 10.0; //Scale (how far you want the object to move) 

//Move right 
goTo(2*s,0*s) 

//Move up-right 
goTo(1*s,Math.sqrt(3)*s) 

//Move up-left 
goTo(-1*s,Math.sqrt(3)*s) 

//Move left 
goTo(-2*s,0*s) 

//Move down-left 
goTo(-1*s,-Math.sqrt(3)*s) 

//Move down-right 
goTo(1*s,-Math.sqrt(3)*s) 

現在,如果你想要的六邊形中定向起來,而不是向下的左,右,使用此代碼:

s = 10.0; //Scale (how far you want the object to move) 

//Move up 
goTo(0*s,2*s) 

//Move up-left 
goTo(-Math.sqrt(3)*s,1*s) 

//Move down-left 
goTo(-Math.sqrt(3)*s,-1*s) 

//Move down 
goTo(0*s,-2*s) 

//Move down-right 
goTo(Math.sqrt(3)*s,-1*s) 

//Move up-right 
goTo(Math.sqrt(3)*s,1*s) 

希望它有幫助!