2014-09-09 6 views
0

Я работаю над базой для базовой интерактивной программы. В нем у меня есть класс InputHandler, который выполняется каждый раз, когда происходит событие keyPressed или keyReleased (указанное в основном классе). В InputHandler есть конструктор, который загружается в основной класс; однако я хочу, чтобы другие объекты (например, класс Player) могли иметь собственное поведение при нажатии клавиш. Есть ли способ иметь один массив или массив ArrayList, который содержит значения нажатых клавиш, которые могут быть загружены другим классом без инициализации нового экземпляра InputListener для каждого из них? Пожалуйста, дайте мне знать, если потребуется дополнительное разъяснение.Обработка входных данных централизованно в Java

Вот код для моего класса InputHandler:

import java.awt.event.KeyEvent; 
import java.awt.event.MouseEvent; 
import java.util.ArrayList; 

public class InputListener { 
    private ArrayList<Integer> keysPressed = new ArrayList<Integer>(); 
    int mouseXPos, mouseYPos; 
    public InputListener(){ 
    } 
    public void keyPressed(KeyEvent e){ 
     keysPressed.add(e.getKeyCode()); 
    } 
    public void keyReleased(KeyEvent e){ 
    } 

    public ArrayList<Integer> getKeysPressed(){ 
     return keysPressed; 
    } 

    public void mousePressed(MouseEvent e){ 
     mouseXPos = e.getX(); 
     mouseYPos = e.getY(); 
    } 

    public int getMouseXPos(){ 
     return mouseXPos; 
    } 

    public int getMouseYPos(){ 
     return mouseYPos; 
    } 
} 

ответ

2

Вы могли бы сделать его наблюдаемым и просто зарегистрировать каждый необходимый класс как игрок, в качестве наблюдателя. поэтому в случае входного события все классы наблюдателей уведомляются о нажатии клавиши.

взгляните на различные учебники о шаблоне наблюдателя, такие как here.

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