我开始开发游戏,我需要能够看到我的鼠标是否在矩形内, 我已经尝试使用.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和矩形,我在类的更新方法中调用了该方法,我正试图在其中使用它。
答案 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