2012-02-12 11 views
1

マウスが画面上の特定のオブジェクト上にあるときに、処理/処理中にどのように検出するかを調べようとしています。この場合、私は線を描いています。処理には "リスナー"をオブジェクトに付けることはできないようですので、何らかの座標検出でこれを行う必要がありますが、これの良い例は見つかりませんでした。これは、これまでの私のコードです:処理 - mouseOver on objects

void draw() { 
for(int i = 0; i < commLength; i ++) { 
    ... 
    line(circ.x, circ.y, circ.x + dir.x, circ.y + dir.y); 
} 
} 

void mouseOver(){ 
//need to detect if mouse is over one of the lines. 
} 

答えて

2

私はこれを行う方法は、マウスがスタートし、ラインの端から一定の距離内にあるかどうかを確認することです。

boolean mouseIsOverLine(float x1, float y1, float x2, float y2) { 
    float d = dist(x1, y1, x2, y2); 
    float d1 = dist(x1, y1, mouseX, mouseY); 
    float d2 = dist(x2, y2, mouseX, mouseY); 

    // distance between vertices must be similar to sum of distances from each vertex to mouse 
    if (d1 + d2 < d + MOUSE_OVER_LINE_DISTANCE_THRESHOLD) { 
    return true; 
    } 

    return false; 
} 

ライン(x1, y1)から(x2, y2)になります。このイメージは、MOUSE_OVER_LINE_DISTANCE_THRESHOLDの値に応じて、false(赤線)とtrue(緑線)を返す例を大まかに示しています。マウスの座標は、それぞれの場合にオレンジ色の点にあります。

enter image description here