查找我的鼠标是否在Java中的矩形内

时间:2013-06-21 15:03:45

标签: java slick2d

我开始开发游戏,我需要能够看到我的鼠标是否在矩形内, 我已经尝试使用.contains作为一个矩形,但我似乎无法让它工作,我将粘贴我的代码下面,任何帮助将不胜感激! :)

public boolean isMouseOver(GameContainer gc){
    r = new Rectangle(getX(), getY(),getWidth(),getHeight());
    Input input = gc.getInput();
    xpos = input.getMouseX();
    ypos = input.getMouseY();
    return r.contains(xpos, ypos);
}

这是我正在尝试使用的方法,但是当鼠标位于矩形内部时,它会一直返回false。显然,我进一步启动了xpos,ypos和矩形,我在类的更新方法中调用了该方法,我正试图在其中使用它。

3 个答案:

答案 0 :(得分:2)

你的鼠标有两个点,它是x和y pos。

int mouseX = gc.getInput().getMouseX();
int mouseY = gc.getInput().getMouseY();

我们有一个矩形

Rectangle rec = new Rectangle( 100, 100, 200, 200 );

所以我们可以检查

if ( mouseX >= rec.getMinX() && mouseX <= rec.getMaxX )   // check if X is within range
   && ( mouseY >= rec.getMinY() && mouseY <= rec.getMaxY) // check if y is within range

或者现在我们知道我们的X值必须大于矩形低值但小于它的高值,并且对于Y来说同样可以检查包含函数

contains(float xp, float yp, float xr, float yr, float widthr, float heightr)

xp - The x coordinate of the point to check
yp - The y coordinate of the point to check
xr - The x coordinate of the rectangle
yr - The y coordinate of the rectangle
widthr - The width of the rectangle
heightr - The height of the rectangle

所以我要说

contains( mouseX, mouseY, rec.getMinX(), rect.getMinY(), rec.getWidth(), rec.getHeight() )

也许这里出了什么问题?

答案 1 :(得分:0)

您是否显示了矩形和鼠标位置的边界?

我猜测矩形是相对于你的组件而鼠标是相对于屏幕的。

您可以使用SwingUtilities类进行点转换,以确保这些点相对于同一个组件。

答案 2 :(得分:0)

尝试这样的事情..

只需运行以下程序,我希望你能得到答案:

package mouse;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;

public class Mouse extends JFrame implements MouseMotionListener {

private Image dbImage;
private Graphics dbg;
int mx, my;
boolean mouseDragged;

public Mouse() throws HeadlessException {
    setSize(400, 300);
    setResizable(false);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    addMouseMotionListener(this);
}

public void paint(Graphics g) {
    dbImage = createImage(getWidth(), getHeight());
    dbg = dbImage.getGraphics();
    paintComponent(dbg);
    g.drawImage(dbImage, 0, 0, this);
}

public void paintComponent(Graphics g) {


    if (mouseDragged){
        g.setColor(Color.DARK_GRAY);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(Color.LIGHT_GRAY);
        g.fillRect(mx, my, 20, 20);

    }else{
        g.setColor(Color.LIGHT_GRAY);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(Color.DARK_GRAY);
        g.fillRect(mx, my, 20, 20);

    }
    repaint();

}

public static void main(String[] args) {
    Mouse mouse = new Mouse();
}

@Override
public void mouseDragged(MouseEvent e) {
    mx = e.getX() - 10;
    my = e.getY() - 10;
    mouseDragged = true;
    e.consume();
}

@Override
public void mouseMoved(MouseEvent e) {
    mx = e.getX();
    my = e.getY();
    mouseDragged = false;
    e.consume();
}

}

你管上还有很多视频。我也会发布链接。检查此YouTube频道:http://www.youtube.com/watch?v=PopdTUzizDA