所以我在让我的 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);
}