检查鼠标是否在公差范围内时出错

Error in checking for if mouse is in tolerance

我有一个矩形,我想在它被点击时消失。

我用下面的方法来控制点击时mouseX和height*0.9是否在矩形区域内:

//balken is a ArrayList of the object holding the variables for the rectangle
boolean mouseInTolerance()
{
  return ((mouseX > balken.get(0).x- balken.get (0).balkenWidth*.5
      || mouseX < balken.get(0).x+ balken.get (0).balkenWidth*.5)
      && (height*.9 > balken.get(0).y- tolerance
      || height*.9 <balken.get(0).y+ tolerance));

但是,无论鼠标在何处单击,这 returns 都是正确的。

编辑:rectMode 设置为 CENTER

让我们考虑这一行:

 return ((mouseX > balken.get(0).x- balken.get (0).balkenWidth*.5
      || mouseX < balken.get(0).x+ balken.get (0).balkenWidth*.5)
      && (height*.9 > balken.get(0).y- tolerance
      || height*.9 <balken.get(0).y+ tolerance));

现在让我们用一个值代替您的变量,以便更容易地看到发生了什么。我们选择什么值并不重要,所以让我们选择这些:

balken.get(0).x = 100;
balken.get(0).y = 200;
balken.get(0).balkenWidth = 20;
balken.get(0).balkenHeight = 30;
height = 1000;
tolerance = 10;

做替换,你得到这个:

 return (mouseX > 90 || mouseX < 110)
     && (900 > 190 || 900 < 210);

现在让我们分别取一半:

(mouseX > 90 || mouseX < 110)

那什么时候会是假的?你能为 mouseX 想出一个数字使这个错误吗?看起来您正在尝试确定 mouseX 何时位于这两点之间,对吗?因此,你想要这两个不等式之间的 and,而不是 or.

同样:

(900 > 190 || 900 < 210)

您可以将 900 更改为任何值,这永远不会是假的。同样,您需要一个 and 运算符,而不是 or.

原因很简单。假设我们有三个 X 值:LEFT、MIDDLE 和 RIGHT。我们如何确定 MIDDLE 点何时位于 LEFT 点和 RIGHT 点之间? MIDDLE 点必须位于 LEFT 点的右侧 - 换句话说,MIDDLE > LEFT。它 必须在 RIGHT 点的左侧 - 换句话说,MIDDLE > LEFT && MIDDLE < RIGHT.

同样的逻辑适用于垂直 y 值。