Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何渲染十六进制网格_Java_Rendering_Hexagonal Tiles - Fatal编程技术网

Java 如何渲染十六进制网格

Java 如何渲染十六进制网格,java,rendering,hexagonal-tiles,Java,Rendering,Hexagonal Tiles,我目前正在制作一个游戏,需要渲染六边形网格,以便为游戏提供一个地方。我使用偏移坐标将十六进制网格存储在内存中。当我尝试渲染网格时,我会得到如下结果,其中六角之间有空格。我希望六边形完全对齐,以便所有必要的都在完全相同的点上,并且它们的线重叠,并且六边形之间没有空间 每个十六进制内的坐标表示十六进制的偏移坐标。 我使用下图()中显示的距离来决定在何处渲染每个十六进制。 我能找到的唯一一个解决这个问题的StackExchange问题是。然而,它只讨论存储十六进制的数据结构,而不讨论如何从所述结构

我目前正在制作一个游戏,需要渲染六边形网格,以便为游戏提供一个地方。我使用偏移坐标将十六进制网格存储在内存中。当我尝试渲染网格时,我会得到如下结果,其中六角之间有空格。我希望六边形完全对齐,以便所有必要的都在完全相同的点上,并且它们的线重叠,并且六边形之间没有空间

每个十六进制内的坐标表示十六进制的偏移坐标。

我使用下图()中显示的距离来决定在何处渲染每个十六进制。

我能找到的唯一一个解决这个问题的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);