0

所以我在让我的 MouseMotionListener 工作时遇到问题。这适用于我希望图像向鼠标方向旋转的游戏。问题是程序实际上不会得到 mouseX 和 mouseY,它甚至不会检测到鼠标正在移动。我认为问题在于我不知道如何正确地“addMouseMotionListener”。我尝试查找它,但我似乎无法找到一个我理解的示例,我可以将它放在我的代码中。

首先,这是我的听众课。

public class MouseListener implements MouseMotionListener{

    public static int mouseX, mouseY;

    public void tick() {

    }

    @Override
    public void mouseDragged(MouseEvent e) {

    }

    @Override
    public void mouseMoved(MouseEvent e) {
        mouseX = e.getX();
        mouseY = e.getY();
        System.out.println("moved");
    }

}

这是我想要的旋转图像的代码:

private int mouseY = MouseListener.mouseY;
private int mouseX = MouseListener.mouseX;
private float angle = (float)(Math.atan2(y - mouseY, x - mouseX));

@Override
public void render(Graphics g) {

    AffineTransform tran = new AffineTransform();
    tran.rotate(0, 0, 0);
    Graphics2D g2d = (Graphics2D)g;
    g2d.rotate(angle, x, y);
    g2d.fillRect(x, y, 64, 64);
    g2d.setTransform(tran);

}

最后是我尝试添加监听器的地方:

public void init() {
    inputManager = new InputManager();

    display.createDisplay();
    display.getFrame().addKeyListener(inputManager);
    display.getFrame().addMouseMotionListener(mouseListener);

    Assets.init();

    gameState = new GameState(this);
    State.setState(gameState);
}

以防万一,你应该知道我正在使用画布来渲染我的图像。

如果您还想查看更多代码,请告诉我。

编辑:这是我的播放器类的新代码:

@Override
public void tick() {
    input();

    mouseY = game.getMouseListener().mouseY;
    mouseX = game.getMouseListener().mouseX;
    angle = (float)(Math.atan2(y - mouseY, x - mouseX) - Math.PI / 2);
}

@Override
public void render(Graphics g) {

    AffineTransform tran = new AffineTransform();
    Graphics2D g2d = (Graphics2D)g;
    g2d.rotate(angle, x, y);
    g2d.drawImage(sprite, x, y, size, size, null);
    g2d.setTransform(tran);
}
4

0 回答 0