2016-12-25 21 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; 

} 

Я удалил весь лишний код, который не участвует в этом вопросе, такой как геттеры, сеттеры и абстрактные методы.

Когда я запускаю это и я нажимаю то, что я вижу

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

несколько раз. Это потому, что он находится внутри метода тика, который обновляется 60 раз в секунду. Что я могу изменить в mousePressed и mouseReleased методы только сделать это один

left pressed 

Спасибо большое

+0

Основываясь на вашем примере нет никакой корреляции между методами обработчика событий мышей и 'tick' методой. Откуда он называется? – hotzst

+1

и какова будет цель метода 'tick()'? –

+0

Вы оставили некоторые важные детали из своего вопроса, в том числе, как упоминает выше @TimothyTruckle, цель метода тика, а также больше информации о вашем графическом интерфейсе и его текущем наблюдаемом и желательном поведении. Пожалуйста, помогите нам, заполнив пробелы в наших знаниях. –

ответ

2

Что я могу изменить в 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; 

    } 
} 

Forethemore вы не должны повторять код в mousePressed() и mouseReleased() выберите один из вариантов, который лучше всего подходит вам.

Чтобы избежать пустых реализаций методы вы можете унаследовать от MouseAdapter, который имеет пустые реализации методов для нескольких Маус releted слушателей

+0

Большое спасибо за вашу помощь Мне удалось решить мою проблему, следуя этому учебному руководству на YouTube. https://www.youtube.com/watch?v=K2RzIK3YEtI –

 Смежные вопросы

  • Нет связанных вопросов^_^