[英]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.