2012-03-21 49 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) 

希望它有帮助!