按下鼠标时Java不会更新鼠标输入?

时间:2017-03-21 20:12:22

标签: java mouse updating pressed

即使在按下鼠标时,我也需要鼠标来更新位置。这是我的代码到目前为止,我不知道从哪里去解决我的问题:

此代码在我的主循环中运行,Mouse是我创建的一个类,它实现了MouseListener和MouseMotionListener,它获取了鼠标坐标的位置以及按下了哪个鼠标按钮。

当我按下我的鼠标时(我正在使用笔记本电脑,不确定是否重要)但它显示按下了哪个按钮,这很好,但是当我移动鼠标时(按下按钮)我已经渲染到鼠标所在的白色方块,它只是冻结而不会随着鼠标移动。我必须释放鼠标,然后再移动它,让它回到鼠标位置的位置。不确定这里发生了什么或如何解决它。我一直在关注youcube上的java游戏教程。

Graphics g = bs.getDrawGraphics(); // bs is a bufferstrategy
{
  g.DrawImage(image, 0, 0, getWidth(), getHeight(), null); // my game image

  g.setColor(Color.WHITE);
  g.setFont(new Font("Verdana", 0, 20));
  g.fillRect(Mouse.getX() - 32, Mouse.getY() - 32, 64, 64);
  g.drawString("Button: " + Mouse.getButton(), 10, 30);
}
g.dispose();
bs.show();

我的鼠标类

package rain.input;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

public class Mouse implements MouseListener, MouseMotionListener {
    private static int mouseX = -1;
    private static int mouseY = -1;
    private static int mouseB = -1;

    public static int getX() {
        return mouseX;
    }

    public static int getY() {
        return mouseY;
    }

    public static int getButton() {
        return mouseB;
    }

    @Override
    public void mouseDragged(MouseEvent e) {}

    @Override
    public void mouseMoved(MouseEvent e) {
        mouseX = e.getX();
        mouseY = e.getY();
    }

    @Override
    public void mouseClicked(MouseEvent e) {}

    @Override
    public void mouseEntered(MouseEvent e) {}

    @Override
    public void mouseExited(MouseEvent e) {}

    @Override
    public void mousePressed(MouseEvent e) {
        mouseB = e.getButton();
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        mouseB = -1;
    }
}

1 个答案:

答案 0 :(得分:0)

使用mouseDragged(MouseEvent e)方法在按下按钮时获取鼠标的坐标。

@Override
public void mouseDragged(MouseEvent e) {
  mouseX = e.getX();
  mouseY = e.getY();
}