Java 如何渲染十六进制网格
我目前正在制作一个游戏,需要渲染六边形网格,以便为游戏提供一个地方。我使用偏移坐标将十六进制网格存储在内存中。当我尝试渲染网格时,我会得到如下结果,其中六角之间有空格。我希望六边形完全对齐,以便所有必要的都在完全相同的点上,并且它们的线重叠,并且六边形之间没有空间 每个十六进制内的坐标表示十六进制的偏移坐标。 我使用下图()中显示的距离来决定在何处渲染每个十六进制。 我能找到的唯一一个解决这个问题的StackExchange问题是。然而,它只讨论存储十六进制的数据结构,而不讨论如何从所述结构呈现它们。我正试图按照描述渲染它们,但是,我得到了上面显示的错误结果 下面是我处理渲染的代码部分(应该很容易推断各种自定义方法的作用,如果有任何混淆,请告诉我):Java 如何渲染十六进制网格,java,rendering,hexagonal-tiles,Java,Rendering,Hexagonal Tiles,我目前正在制作一个游戏,需要渲染六边形网格,以便为游戏提供一个地方。我使用偏移坐标将十六进制网格存储在内存中。当我尝试渲染网格时,我会得到如下结果,其中六角之间有空格。我希望六边形完全对齐,以便所有必要的都在完全相同的点上,并且它们的线重叠,并且六边形之间没有空间 每个十六进制内的坐标表示十六进制的偏移坐标。 我使用下图()中显示的距离来决定在何处渲染每个十六进制。 我能找到的唯一一个解决这个问题的StackExchange问题是。然而,它只讨论存储十六进制的数据结构,而不讨论如何从所述结构
@覆盖
公共空间涂料(图g){
int quarthexsize=32;//使用非静态的final成员变量,因为我想让它动态地确定稍后适合屏幕的六边形的最大大小
int-halfHexSize=quarthexsize*2;
int hexSize=halfHexSize*2;
int-cx、cy、renderX、renderY;
g、 setColor(颜色:深灰色);
g、 fillRect(0,0,getWidth(),getHeight());
g、 setColor(Color.WHITE);
对于(cx=0;cx我已经确定了错误是什么。当我假设我在问题中发布的图表完全解释了六边形的位置时,我错过了问题中的一个具体细节
我已将变量renderX更改为:
renderX *= Math.round(HALF_SQRT_THREE * hexSize);
HALF_SQRT_THREE
是一个在变量中定义的常量,以避免每次渲染六边形时重新计算它。它被定义为Math.SQRT(3)/2.0
以下是引自:
六边形的宽度为width=sqrt(3)/2*height。相邻六边形之间的水平距离为horiz=width
renderX *= Math.round(HALF_SQRT_THREE * hexSize);