似乎无法让这个MouseMotionListener工作[Java]

时间:2017-02-05 04:54:31

标签: java graphics mousemotionlistener

所以我遇到了让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);
}

0 个答案:

没有答案