javascript - Canvas 平移例程沿六边形路径移动

标签 javascript html canvas

我有一个脚本正在运行,它允许我沿着路径移动图像,但我的路径在大约 6 次移动后偏离轨道(在六边形 map 上)。

我知道有一个函数可以处理这个问题,但现在我找不到该怎么做。目前,我对 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 和 goY 值是全局变量,它们根据我们移动的方向进行更新。 现在,我的 x 移动使用浮点值 18.3,y 移动使用 float 9.8,直线向上或向下移动使用 int 值 21。

我记得大学时(只是模糊地)我需要在某处进行一些平方根和 PI 运算,但现在我只是添加和减去每次移动的静态值。

有人已经解决这个问题了吗?

最佳答案

要在六边形网格上移动某物,它必须遵循这些基本单位。

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)

希望对你有帮助!

关于javascript - Canvas 平移例程沿六边形路径移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9811821/

相关文章:

javascript - 视频+ Canvas 全屏问题

video - 如何通过javascript在像ffmpeg风格的 Canvas 中绘制马赛克?

javascript - 为什么我的 radio 输入值是 NaN?

javascript - 我该如何循环这个?

Javascript显示div在回发后消失了

java - 为什么 selenium WebDriver 无法单击任何内容,即使该元素存在并且处于焦点上?

Javascript const 在 chrome 开发控制台中显示为未定义而不是未定义

javascript - 为什么我不能使用 JavaScript 隐藏这个 div?

html - 如何避免重叠的 HTML 标签来突出显示文本

javascript - Canvas 上未绘制线条