2017-08-30 80 views
0

嘗試使用頭頂相機進行簡單的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; 
} 

} 

我在哪裏去這裏工作?

回答

1

問題是您的canvas完全填充JFrame的內容窗格,因此捕獲所有鼠標事件。最簡單的解決方法是將鼠標監聽器添加到canvas而不是frame

至於你爲什麼在你的框架上收到一個鼠標事件 - 我認爲這一定是由於創建各種組件時的時間問題。

+0

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