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