是否可以制作多边形边界框?

时间:2011-03-22 19:26:10

标签: java bounds bounding-box hexagonal-tiles

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

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

我已经绘制了形状并将它们按照应有的方式对齐,但我希望细胞与彼此完全相邻,要么边缘相互进入,要么它们紧挨着彼此,但从来没有一个像素它们之间。当BB是矩形时,这是不可能的。

如果这是完全不可能的,也许有办法减少组件的大小,但仍然可以得到完整的东西?这样你就可以在六角形的中间有一个规则的矩形,虽然它使两个“点”无用,这是不好的。

谢谢< 3

1 个答案:

答案 0 :(得分:3)

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

可以制作非矩形窗口,剪裁区域......但是绑定这样的东西的框将始终是“框”。这是因为许多例程在边界框上进行了粗略检查(重叠等),然后对实际形状进行细粒度检查。细粒度检查在计算上是昂贵的,因此快速检查(这些矩形是否重叠?)可以作为一个过滤器,候选人应该得到额外的时钟周期。

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

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

  2. 如果要使用边界框的坐标来指定单击侦听器,请执行此操作。在六边形监听器中实现额外的代码,以确定点击是在十六进制内还是在边界框内。如果它在十六进制之外,则丢弃。

  3. 基本上不知道你想要完成什么,不可能提供合理的解决方案;但是,许多例程首先将边界框检查作为减少调用次数的快速而肮脏的方法,然后进行更详细的检查以查看边界框解决方案是否为误报(想想对象冲突)。