检查鼠标是否在公差范围内时出错
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 值。
我有一个矩形,我想在它被点击时消失。
我用下面的方法来控制点击时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 值。