在一组重叠的对象中查找被点击的对象

时间:2019-02-12 13:48:34

标签: paperjs

两条线的交点处有一个圆。如何确定鼠标是否在圆形,第1行,第2行或其他位置的顶部单击?

我使用过if-then-else阶梯来测试view.onClick函数中的object.hitTest。我先测试线条,然后再画圈。

sketch link

当我在重叠线区域内的任意位置单击圆圈时,所有三个hitTest都返回HitResult。我该怎么做,所以当我单击圆圈上的任意位置时,只有圆圈hitTest会通过。

1 个答案:

答案 0 :(得分:3)

我不确定这是否是您要尝试的方法,但是您可以通过致电project.hitTest()立即对所有项目进行测试。
只有最上面的项目会匹配。

这里是sketch演示解决方案。

var myLine1 = new Path.Line({
    from: [50, 50],
    to: [150, 50],
    strokeColor: 'black',
    strokeWidth: 10,
    name: 'myLine1'
});

var myLine2 = new Path.Line({
    from: [150, 50],
    to: [150, 100],
    strokeColor: 'black',
    strokeWidth: 10,
    name: 'myLine2'
});

var myCircle = new Path.Circle({
    center: [150, 50],
    radius: 10,
    strokeColor: 'red',
    fillColor: 'red',
    name: 'myCircle'
});

view.onClick = function(event) {
    var hitTest = project.hitTest(event.point);
    if (hitTest) {
        alert('Clicked on item: ' + hitTest.item.name);
    } else {
        alert('Clicked elsewhere');
    }
};