java - 比较 double 的问题

标签 java comparison mouse collision

这个简单的 if 比较不起作用,我不知道为什么。

代码:

public abstract class Button extends Drawable_object {
...

@Override
public void update()
{
    super.update();
    mouseOver_last = mouseOver;

    double mx = Game_logic.get_mouse_x();
    double my = Game_logic.get_mouse_y();

    //the not working statement check:
    if ((mx <= x + ((double)width / 2))&&
       (mx >= x  - ((double)width / 2))&&
       (my >= y  - ((double)height / 2))&&
       (my <= y  + ((double)height / 2)))
    { mouseOver = true;}
    else mouseOver = false;
    ....
    }

虽然 Game_logic.get_mouse_x() 和 y 是静态方法:

public class Game_logic {
...

public static double get_mouse_x() { return mouse_x; }
public static double get_mouse_y() { return mouse_y; }
}

这些是由 Mouse adapaer 在我的主运行类中设置的:

 public Board() throws IOException, URISyntaxException {
 ...

 private class MAdapter2 extends MouseAdapter {
    @Override
    public void mouseMoved(MouseEvent e) {
        Game_logic.set_mouse_x(e.getX());
        Game_logic.set_mouse_y(e.getY());
    }

}

问题是,当我在屏幕上绘制 x - width/2、mx 和 x + width/2 (与 y 相同)时,将鼠标放在我想要的位置看起来语句必须是正确的,但是 mouseOver 仍然是错误的。我该如何解决这个问题?

最佳答案

这并不能直接回答您的问题,我只是表明您的 if 语句有可能成立。我相信您应该打印出 mx,my 并将它们与您期望的值进行比较。这可能就是你的问题所在。显然,您还应该检查您对 x,y,width,height 的选择。

public static void main(String[] args) {
    boolean mouseOver;
    int width = 50;
    int height = 50;
    double x = 40;
    double y = 40;
    double mx = 40;
    double my = 40;
    if ((mx <= x + ((double) width / 2)) && (mx >= x  - ((double) width / 2))
            && (my >= y  - ((double) height / 2)) 
            && (my <= y  + ((double) height / 2))) { 
        mouseOver = true;
    } else {
        mouseOver = false;
    }
    System.out.println(mouseOver);
}

请打印出mx,my,x,y,width,heigh的所有值并将其发布并与您认为的值进行比较。

关于java - 比较 double 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20435152/

相关文章:

java - 我可以获得具有更大滑动窗口的 Char 迭代器吗? java/scala

java.lang.RuntimeException : Unable to start activity ComponentInfo when using admob sdk

windows - 在计算机锁定时以编程方式移动鼠标

linux:双鼠标 - 具有多个鼠标指针的多个鼠标?

java - 未生成 Zip 文件

java - 每次我编译项目时,while 循环之外的所有内容都不会显示(输入来自文件)

python - 为什么 '362' > 378?

golang 为什么命名和非命名结构比较结果相同

c++ - 获取缓冲区内容,将其存储在结构中,获取新的缓冲区内容,看看结构中是否相等

c# - 背景鼠标模拟