处理板上形状的选择


2

我有一块板作为画布,其上绘制了几个形状,其中一些是三角形,圆形,矩形,但都包含在它们自己的定界矩形内。

“的圆圈将是一个矩形内”

我把两个圆圈A,B上的板,其中A是通过B和具有一定的区域发生碰撞。 如果我点击与容器盒相对应的区域,但不是实际的A圆形区域,我不会选择A圆圈,但是这会阻止我选择B,因为我的容器重叠并且位于B之一。

在事件基本框架中,子事件将转到父母,而不是我猜测的兄弟姐妹。

所以我的选择是检查所有形状的容器,它们在z点排序的点x有一些区域。然后为每个容器检查它内部的形状是否碰撞。

它似乎不是很高效,但有没有其他方法?

--------- 
| -------- 
| |  | 
-----|  | 
    -------- 
1

您正在处理它以及它可以被处理 - 窗口系统通常服从Z顺序(图层)。

无论如何,从长远来看,这样会更好,尤其是如果您希望能够通过在其周围绘制选择框来选择多个项目。

有一些算法可以通过将矩形转换为x和y轴上的2d表示来查找矩形是否重叠。你可以做同样的事情,然后比较你的观点,看看哪些对象的点重合:

Algorithm to detect intersection of two rectangles?

只是把你的点选择(或矩形选择,如果你画一个边界框来选择多个项目)作为另一个矩形将与其他矩形进行比较。

-Adam


0

如果你真的需要速度,你可以玩一些技巧。例如:

  • 如果您正在使用较深的托盘,则可以使用颜色的低位来标记对象。然后偷看像素会给你提供对象,或者至少可以快速剔除列表。
  • 即使在低比特深度,如果对象都是单色,你可以使用全彩
  • 如果在足够低的分辨率是可以保持一个数组,说什么对象拥有什么像素。
  • 在更高的水库,你可以做相同的,但使用RLE保持尺寸减小(也看成了四棵)
  • ,...等

如果只是简单的实现你后,一个快速的技巧是记录X,重新绘制屏幕,​​并注意哪个对象描绘了该像素。

- MarkusQ