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