【问题标题】:Is it possible to make a polygon bounding box?是否可以制作多边形边界框?
【发布时间】:2011-07-20 18:46:03
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

    标签: java bounds bounding-box hexagonal-tiles


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • +1:使用矩形进行第一次扫描,然后在需要时进行细化。
    • 感谢您的回答!不幸的是,我只是误解了我想要做的事情,它与边界框无关^^
    猜你喜欢
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 2020-05-26
    • 2020-11-23
    相关资源
    最近更新 更多