Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';我似乎无法让这个MouseMotionListener工作[Java]_Java_Graphics_Mousemotionlistener - Fatal编程技术网

Can';我似乎无法让这个MouseMotionListener工作[Java]

Can';我似乎无法让这个MouseMotionListener工作[Java],java,graphics,mousemotionlistener,Java,Graphics,Mousemotionlistener,因此,我的MouseMotionListener无法正常工作。这是一个游戏,我想我的图像旋转的方向,我的鼠标。 问题是程序实际上不会得到mouseX和mouseY,甚至也不会检测到鼠标正在移动。我认为问题在于我不知道如何正确地“添加MouseMotionListener”。我试着查找它,但我似乎找不到一个我理解的例子,我可以把它放在我的代码中 首先,这是我给听众的课 public class MouseListener implements MouseMotionListener{ p

因此,我的MouseMotionListener无法正常工作。这是一个游戏,我想我的图像旋转的方向,我的鼠标。 问题是程序实际上不会得到mouseX和mouseY,甚至也不会检测到鼠标正在移动。我认为问题在于我不知道如何正确地“添加MouseMotionListener”。我试着查找它,但我似乎找不到一个我理解的例子,我可以把它放在我的代码中

首先,这是我给听众的课

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);
}

display.getFrame().addMouseStener(mouseStener);也添加这一行。@CRazyProgrammer它就在那里,在最后显示的代码中可以看到。编辑:哦,我知道我可能错了,但请告诉我它是否正在工作。@CRazyProgrammer似乎什么都没做。可能存在一系列问题,但没有足够的上下文来100%确定,我怀疑框架的根窗格或同意窗格可能在通知框架之前吸收了鼠标事件。相反,尝试使用display.getFrame().getContentPane()并将侦听器添加到其中,如果失败,则需要提供一个可运行的示例来演示您的问题