在十六进制网格上移动并沿着边缘移动的最简单方法是什么?

时间:2016-03-13 11:28:54

标签: hexagonal-tiles

我有一个半径可变的六边形网格。我的实体每回合可以移动2个十六进制。

我应该如何计算下一步的边界,然后顺时针绕地图行进?

边界处的首选移动

角色应该在每个回合逆时针方向移动时保持在边界处。

Preferred movement at the boundary

中间的示例移动

角色应该每回合移动1或2个十六进制边缘。

enter image description here enter image description here

我无法弄清楚这样做的简单数学。

编辑:

这就是我在边界进行移动的方式

  var x = pos.x;
  var y = pos.y;
  var z = -pos.x-pos.y;
  var dx =  0;
  var dy =  0;

  if      (x == -radius && z >   1) {          dy =  2; }
  else if (x == -radius && z ==  1) { dx =  1; dy =  1; }
  else if (y ==  radius && x <  -1) { dx =  2           }
  else if (y ==  radius && x == -1) { dx =  2; dy = -1; }
  else if (z == -radius && y >   1) { dx =  2; dy = -2; }
  else if (z == -radius && y ==  1) { dx =  1; dy = -2; }
  else if (x ==  radius && z <  -1) {          dy = -2; }
  else if (x ==  radius && z == -1) { dx = -1; dy = -1; }
  else if (y == -radius && x >   1) { dx = -2;          }
  else if (y == -radius && x ==  1) { dx = -2; dy =  1; }
  else if (z ==  radius && y <  -1) { dx = -2; dy =  2; }
  else if (z ==  radius && y == -1) { dx = -1; dy =  2; }

任何想法我应该如何清理它?

最简单的边界路径最容易从x,y和z计算。

0 个答案:

没有答案