2

我开始开发游戏,我需要能够查看我的鼠标是否在一个矩形内,我尝试使用 .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 和矩形,并在我尝试使用它的类的更新方法中调用了该方法。

4

3 回答 3

3

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

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() )

也许这里出了点问题?

于 2013-07-12T07:24:18.340 回答
0

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

我猜 Rectangle 是相对于您的组件,而鼠标是相对于屏幕。

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

于 2013-06-21T15:07:28.270 回答
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

于 2013-07-12T07:30:46.667 回答