我希望在面板上有数千个绘制的形状,并且当我鼠标悬停或点击它们时能够识别它们。这样做的最佳方式是什么?
我的猜测是我必须在表格中有一些形状区域。当我将鼠标悬停在页面上时,可以通过一些聪明的方式查找匹配项。似乎是计算密集型的。有没有可以提供帮助的方法?
答案 0 :(得分:3)
当您在面板中绘制时,还会将形状绘制为未显示的位图,并使用形状ID作为颜色。当您需要查找形状时,只需检查位图中相应坐标处的像素。绘制位图时,请确保关闭任何线条平滑或抗锯齿!
答案 1 :(得分:0)
您想要的是Quad Tree或Binary Space Partitioning(BSP)。
Quad Tree相当简单。 BSP的速度非常快,但不能处理移动的形状而且难以构建。
Spatial Hash非常容易编码并在运行时自行构建。它的主要缺点是更糟糕的情况下查找时间退化O(n)
(如果大多数形状是水平或垂直线)。
Box2D使用它自己的space partitioning品种。我不确定底层算法是什么,以及它是新颖的还是派生的。但Erin写了Box2D's broadphase,以便它可以在物理引擎之外使用。该代码是zlib许可的,因此您只需复制出您需要的几个文件。