1

(首先,为了确定,六边形是一个有 6 个点的多边形,想想蜂窝或文明 5)

我正在制作一个使用六边形网格的游戏,但我似乎无法正确设置边界框,Javas API 只告诉我矩形“BB”(getBounds 和 getBounds2D)。

我已经绘制了形状并按应有的方式对齐它们,但我希望单元格彼此完全相邻,要么边缘相互进入,要么它们彼此相邻,但它们之间甚至没有 1 个像素。当 BB 是矩形时,现在不可能做到这一点。

如果这完全不可能,也许有一种方法可以减小组件尺寸但仍能画出完整的东西?这样你就可以有一个跨越六边形中间的规则矩形,尽管它使两个“点”无用,这不好。

谢谢 <3

4

1 回答 1

3

根据定义,边界框是一个框(又名矩形)。所以不,不可能制作非矩形边界框。

可以制作一个非矩形的窗口、剪切区域……但是限制这种东西的盒子永远是一个“盒子”。这是因为许多例程对边界框进行初步检查(重叠等),然后对实际形状进行细粒度检查。细粒度检查的计算成本很高,因此快速检查(这些矩形是否重叠?)可以充当过滤器,候选者应该得到额外的时钟周期。

也就是说,你要用边界框做的是完全不同的事情:

  1. 如果您打算使用边界框的坐标来确定是否需要将某些内容绘制到屏幕上,那么如果边界框的一部分可见,则绘制它。然后使用剪辑例程(可以剪辑为任何形状)以确保只显示您想要可见的位。

  2. 如果您打算使用边界框的坐标来指定点击侦听器,那么就这样做。在六边形监听器中实现额外的代码以确定点击是在十六进制内还是在边界框内。如果它在十六进制之外,则丢弃。

基本上在不了解您要完成的工作的情况下,不可能提供合理的解决方案;然而,许多例程首先进行边界框检查,作为减少调用次数的一种快速而肮脏的方法,然后进行更详细的检查以查看边界框解决方案是否为误报(想想对象碰撞)。

于 2011-03-22T19:37:04.623 回答