2016-12-25 29 views
1

我在java中制作游戏,并且添加了鼠标输入。这是我的代码。Java - 点击鼠标时,tick()循环导致多个动作

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; 

} 

我删除了这个问题中没有涉及的所有额外代码,例如getters,setters和abstract方法。

当我运行这一点,我点击我看到的是

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

几次。 这是因为它在tick方法内部,每秒更新60次。我可以换到的mousePressed和的mouseReleased方法只能使一个

left pressed 

非常感谢

+0

继承空的方法实现。它来自哪里? – hotzst

+1

以及'tick()'方法的用途是什么? –

+0

您已经忽略了一些您的问题的重要细节,包括上面提到的@TimothyTruckle,tick方法的用途,以及更多有关GUI及其当前观察和期望行为的背景。请填写我们的知识空白帮助我们。 –

回答

2

我能换到的mousePressed和的mouseReleased方法只能使一个

暂时您可以明显地将系统语句从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其中有几个鼠标空的方法实现releted根据您的例子有鼠标事件处理方法和`tick`方法之间没有关联听众

+0

非常感谢您的帮助 我设法通过在YouTube上观看此游戏教程来解决我的问题。 https://www.youtube.com/watch?v=K2RzIK3YEtI –