簡體   English   中英

Java-單擊鼠標時,tick()循環會導致多個動作

[英]Java - when clicking the mouse, the tick() loop causes more than one action

我正在用Java做游戲,並且添加了鼠標輸入。 這是我的代碼。

public class MouseInput implements MouseListener, MouseMotionListener {

public static boolean leftPressed;
public static boolean rightPressed;

public MouseInput(){

}
public void tick(){
    if(leftPressed){
        System.out.println("left pressed");
    }
}

@Override
public void mousePressed(MouseEvent e) {
    if(e.getButton() == MouseEvent.BUTTON1){
        leftPressed = true;

    }else if(e.getButton() == MouseEvent.BUTTON3){
        rightPressed = true;

    }
}

@Override
public void mouseReleased(MouseEvent e) {
    if(e.getButton() == MouseEvent.BUTTON1)
        leftPressed = false;
    else if(e.getButton() == MouseEvent.BUTTON3)
        rightPressed = false;

}

我刪除了此問題中未涉及的所有多余代碼,例如getter,setter和abstract方法。

當我運行此程序時,我單擊所看到的是

left pressed
left pressed
left pressed
left pressed
left pressed
left pressed

幾次。 這是因為它在tick方法中,每秒更新60次。 我可以將mousePressed和mouseReleased方法更改為僅使它成為一種

left pressed

非常感謝

我可以將mousePressed和mouseReleased方法更改為僅使它成為一種

暫時,您顯然可以將sysout語句從tick()方法移至mousePressed()

public void tick(){
    if(leftPressed){
    }
}

@Override
public void mousePressed(MouseEvent e) {
    if(e.getButton() == MouseEvent.BUTTON1){
        leftPressed = true;
        System.out.println("left pressed");

    }else if(e.getButton() == MouseEvent.BUTTON3){
        rightPressed = true;

    }
}

因此,您不應該廢除mousePressed()的代碼,而mouseReleased()可以選擇更適合您需要的代碼。

為了避免使用空的方法實現,您可以繼承MouseAdapter ,它為多個Mouse releted偵聽器提供了空的方法實現

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM