我有一块板作为画布,上面画有几个形状,其中一些是三角形,圆形,矩形,但都包含在它们自己的边界分隔矩形内。
“圆圈将位于矩形内”
我在A超过B并且有一些区域碰撞的板上放了两个圆圈A,B。 如果我点击对应于容器盒的A区域而不是实际的A圆形区域,我不会选择A圈,但是这会阻止我选择B,因为我的A容器重叠并且超过了B。
在事件基础框架中,子事件将发送给父母,而不是兄弟姐妹。
所以我的选择是对所有形状容器进行检查,该容器在z索引处排序的点x处有一些区域。然后为每个容器检查它内部的形状是否发生碰撞。
它似乎没有超级效率,但还有其他方法吗?
---------
| --------
| | |
-----| |
--------
答案 0 :(得分:1)
你正在处理它以及它可以处理 - 窗口系统通常服从Z顺序(层)。
从长远来看,这样会更好,特别是如果你想通过在它们周围画一个选择框来选择多个项目。
有一些算法可以通过将矩形转换为x轴和y轴上的2d表示来查找矩形是否重叠。您可以执行相同的操作,然后比较您的观点以查看您的点重叠的对象:
Algorithm to detect intersection of two rectangles?
只需处理您的点选择(如果您绘制一个边界框以选择多个项目,则选择矩形)作为另一个要比较的矩形与其他矩形重叠。
- 亚当
答案 1 :(得分:0)
如果你真的需要速度,你可以玩一些技巧。例如:
如果只是简单的实现,那么一个快速的技巧就是记录X& Y,重新绘制屏幕,并记下哪个对象绘制了该像素。
- MarkusQ