mouseMoved事件似乎只被召唤一次

问题描述:

尝试使用头顶相机进行简单的RPG游戏。我去的时候去实现的MouseMotionListener,这不是我第一次用一个的MouseMotionListener,看来该mousedMoved的MouseEvent只能获得的所谓一次,然后简单似乎没有工作了。我一直坚持这一段时间,所有的研究都让我陷入死胡同。mouseMoved事件似乎只被召唤一次

我确实有一个完整的游戏循环带有刻度和渲染方法。但正如你在下面的代码中看到的那样,在鼠标处理类(代码的底部)中,它会返回一个数字,每当鼠标移动时它就会增加一个数字(在tick方法中,我向控制台输出数字的值),并且它还应该向控制台输出鼠标的x和y坐标。当你运行程序时,数字等于1,它只打印鼠标坐标一次。一个例子是控制台输出会是这个样子:

124 82 
1 

或者,如果到时程序启动,它会看起来像这样我的鼠标没有悬停JFrame中:

0 

这里是我的我的游戏循环init方法:

private void init() { 
    display = new Display("Operation Blood Bath: Alpha 0_5.0", 800, 600); 
    game = new Game(); 
    Assets.init(); 
} 

这里是我的显示器类,被调用的init方法:

public class Display { 

private JFrame frame; 
private Canvas canvas; 

public Display(String title, int width, int height) { 
    frame = new JFrame(title); 
    frame.setSize(width, height); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setResizable(false); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 

    canvas = new Canvas(); 
    canvas.setPreferredSize(new Dimension(width, height)); 
    canvas.setMaximumSize(new Dimension(width, height)); 
    canvas.setMinimumSize(new Dimension(width, height)); 
    canvas.setFocusable(false); 

    frame.add(canvas); 
    frame.addMouseMotionListener(new MouseMotionHandling()); 
    frame.pack(); 
} 

public Canvas getCanvas() { 
    return canvas; 
} 

public JFrame getFrame() { 
    return frame; 
} 

} 

蜱方法:

private void tick() { 
    game.tick(); 
    System.out.println(MouseMotionHandling.HELLO()); 
} 

下面是其中被调用的显示类鼠标处理类:

public class MouseMotionHandling implements MouseMotionListener { 

private static int number = 0; 

@Override 
public void mouseDragged(MouseEvent arg0) { 

} 

@Override 
public void mouseMoved(MouseEvent arg0) { 
    System.out.println(arg0.getX() + " " + arg0.getY()); 
    number++; 
} 

public static int HELLO() { 
    return number; 
} 

} 

我在哪里去这里工作?

问题是您的canvas完全填充JFrame的内容窗格,因此捕获所有鼠标事件。最简单的解决方法是将鼠标监听器添加到canvas而不是frame

至于你为什么在你的框架上收到一个鼠标事件 - 我认为这一定是由于创建各种组件时的时间问题。

+0

工作知府!非常感谢你。 – HuffelPuff