java - 游戏编程菜单,鼠标检测方法不起作用

标签 java slick2d

这是我的方法的代码,它应该检测鼠标点击是否在我定义的矩形内。

 private boolean mouseOver(int mx,int my,int x, int y, int width, int height){



    if((x < mx  && mx < x + width)&&(y < my && my < y + height)){
        System.out.print(mx+"\n"+my+"\n"+x+"\n"+y+"\n"+width+"\n"+height+"\n");
    return true;

    }else 
       System.out.print(mx+"\n"+my+"\n"+x+"\n"+y+"\n"+width+"\n"+height+"\n");
        return false;


}

这是我定义矩形(带有文本)的地方。

public void render(Graphics g){
    Font fnt = new Font("arial", 1, 50);
    Font fnt1 = new Font("arial", 1, 30);
    g.setColor(Color.white);

    g.setFont(fnt);
    g.drawString("Menu", 240,70);
    g.setFont(fnt1);
    g.drawString("Play", 270,190);
    g.drawRect(210, 150, 200, 64);
    g.drawString("Scores", 270,290);
    g.drawRect(210, 250, 200, 64);
    g.drawString("Quit", 270,390);
    g.drawRect(210, 350, 200, 64);
}

这里是使用该方法的地方。

public void mousePressed(MouseEvent e){
    int mx = e.getY();
    int my = e.getX();
    //play button
    if (mouseOver(mx ,my ,210, 150, 200, 64)){
        game.gameState = STATE.Game;
    }
    //quit button
    if (mouseOver(mx ,my ,210, 350, 200, 64)){

        System.exit(1);

    }
}

当该方法被调用时,我命令它吐出它需要的字段,这是一个例子。

mx = 185 我的 = 344 x = 210 y = 350 宽度 = 200 高度 = 64 该数据来自在矩形内单击鼠标,因此如果它正常工作,它应该返回 true。 也许它返回了错误的鼠标按下坐标?

有什么想法吗? 如果有任何区别,我正在使用 mac。

最佳答案

查看鼠标点位置的一种简单方法是使用 Rectangle 对象及其 contains(Point p) 方法。

例如:

// constant section of your program
private static final STATE_RECTANGLE = new Rectangle(210, 150, 200, 64);
private static final QUIT_RECTANGLE = new Rectangle(210, 350, 200, 64);

// elsewhere
public void mousePressed(MouseEvent e){
    //play button
    if (STATE_RECTANGLE.contains(e.getPoint())) {
        game.gameState = STATE.Game;
    }
    //quit button
    if (QUIT_RECTANGLE.contains(e.getPoint())){
        System.exit(1);
    }
}

在通过转换将 Graphics 对象转换为 Graphics2D 对象后,您甚至可以并且应该使用相同的 Rectangles 进行绘制。

但话虽如此,我们只是治标不治本,因为您的计划结构让我担心。其一,你有太多神奇的数字,并且有难以调试错误的风险。此外,您正在对数据进行硬编码,这会使您的程序变得僵硬,因此难以增强和扩展。此外,您将 View 与模型完全混合在一起,这也使您的代码比它必须的复杂得多,因此很难调试、修改和增强。

关于java - 游戏编程菜单,鼠标检测方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30363957/

相关文章:

java - LWJGL 2 代码与 LWJGL 3 代码不兼容?

javascript - 通过Swt Eclipse浏览器监听字段的变化

java - 使用 javafx 从 webview 获取内容

java - 更新 NetBeans 中的 JAR 库

java - 在 Android 应用程序中注册用户指纹

java - Slick2D 和 JBox2D。如何绘制

java - 获取键盘用户输入

java - 具有单个或多个值的 SOLR 查询字段

java - 流媒体资源 (Slick2D)

java - Slick2D 未检测到鼠标移动