Hexagonal tiles 在六边形网格上沿边缘移动的最简单方法是什么?

Hexagonal tiles 在六边形网格上沿边缘移动的最简单方法是什么?,hexagonal-tiles,Hexagonal Tiles,我有一个半径可变的六边形网格。我的实体每回合可以移动2个六角 我应该如何计算下一步走向边界,然后沿着地图顺时针移动 首选边界移动 角色每次逆时针移动时应保持在边界处 中间移动示例 角色每转一圈应该向边缘移动1或2个六角 我想不出简单的数学来做这件事 编辑: 这就是我在边界上做运动的方式 var x = pos.x; var y = pos.y; var z = -pos.x-pos.y; var dx = 0; var dy = 0; if (x =

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

我应该如何计算下一步走向边界,然后沿着地图顺时针移动

首选边界移动

角色每次逆时针移动时应保持在边界处

中间移动示例

角色每转一圈应该向边缘移动1或2个六角

我想不出简单的数学来做这件事

编辑:

这就是我在边界上做运动的方式

  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; }
var x=pos.x;
变量y=位置y;
var z=-pos.x-pos.y;
var-dx=0;
var-dy=0;
如果(x==-radius&&z>1){dy=2;}
如果(x==-radius&&z==1){dx=1;dy=1;}
如果(y==半径&&x<-1){dx=2}
如果(y==半径&&x==-1){dx=2;dy=-1;}
如果(z=-radius&&y>1){dx=2;dy=-2;}
如果(z=-radius&&y==1){dx=1;dy=-2;}
如果(x==半径&&z<-1){dy=-2;}
如果(x==半径&&z==-1){dx=-1;dy=-1;}
如果(y==-radius&&x>1){dx=-2;}
如果(y=-radius&&x==1){dx=-2;dy=1;}
如果(z==半径&&y<-1){dx=-2;dy=2;}
如果(z==半径&&y==-1){dx=-1;dy=2;}
我该怎么清理


到边界的最短路径可能最容易从x、y和z计算。

为什么1,-2移动到0,-3而不是-1,-2?同样,为什么0,-1移动到-2,0而不是-2,-1(两步出)或-2,1?这只是一个例子。唯一的规则是角色尽可能向边界移动。如果它不能再向前移动,那么逆时针移动。每转一圈都必须移动2个六角。如果有人看到这个问题,请参见。