Hallo,
ich programmiere momentan ein kleines Spiel und habe folgendes Problem:
Wenn ich Escape drücke soll sich das Pausenmenü öffnen. Das funktioniert auch soweit und das Menü öffnet sich. Jetzt soll sich das Fenster bei erneutem Druck auf Escape wieder schliessen.
Das Problem liegt daran, dass die Funktionen keyPressed, keyReleased, etc. nicht aufgerufen werden.
Hätte jemand eine Idee?
Anzumerken wäre: Update wird aufgerufen, nur die anderen Methoden nicht.
ich programmiere momentan ein kleines Spiel und habe folgendes Problem:
Wenn ich Escape drücke soll sich das Pausenmenü öffnen. Das funktioniert auch soweit und das Menü öffnet sich. Jetzt soll sich das Fenster bei erneutem Druck auf Escape wieder schliessen.
Das Problem liegt daran, dass die Funktionen keyPressed, keyReleased, etc. nicht aufgerufen werden.
Hätte jemand eine Idee?
Anzumerken wäre: Update wird aufgerufen, nur die anderen Methoden nicht.
Java:
public class KeyManager implements KeyListener {
public boolean[] keys;
public boolean[] previousKeys;
public double[] keyTime;
public KeyManager() {
keys = new boolean[525];
previousKeys = new boolean[525];
keyTime = new double[525];
}
public void update() {
for(int i=0; i<keys.length; i++) {
previousKeys[i] = keys[i];
if(keys[i]) {
keyTime[i] += Vars.deltaTime;
}
}
}
@Override
public void keyPressed(KeyEvent e) {
keys[e.getKeyCode()] = true;
}
@Override
public void keyReleased(KeyEvent e) {
keys[e.getKeyCode()]= false;
keyTime[e.getKeyCode()] = 0;
}
@Override
public void keyTyped(KeyEvent e) {
}
/* debug
@Override
public String toString() {
return "Ich bins, der Keymanager";
}
//*/
}
Java:
public class Menu extends JPanel implements State {
private static final long serialVersionUID = -9023306276547365993L;
public static final String LEVEL_PATH = "rsc/levels/";
public static final String IMAGE_PATH = "rsc/images/";
private Color shader = new Color(0, 0, 0);
public Menu() {
super();
this.setVisible(false);
this.setFocusable(true);
this.addKeyListener(Vars.keyManager);
}
@Override
public void update() {
if(Vars.keyManager.previousKeys[KeyEvent.VK_ESCAPE] && !Vars.keyManager.keys[KeyEvent.VK_ESCAPE]) {
Start.actualState = Vars.game;
Vars.game.stateChanged();
System.out.println("JJJAAAA!!!");
}
if(Vars.keyManager.keys[KeyEvent.VK_W]) {
System.out.println("Hallo aus Menu");
}
Vars.keyManager.update();
}
@Override
public void render(Graphics2D g) {
Color previousColor = g.getColor();
g.setColor(shader);
g.fillRect(0, 0, Vars.gui.getWidth(), Vars.gui.getHeight());
g.setColor(previousColor);
}
@Override
public void stateChanged() {
GUI gui = Vars.gui;
this.setPreferredSize(gui.canvas.getSize());
gui.canvas.setVisible(false);
this.setVisible(true);
gui.add(this, BorderLayout.CENTER);
//gui.pack();
gui.repaint();
}
@Override
protected void paintComponent(Graphics gmain) {
super.paintComponent(gmain);
Graphics2D g = (Graphics2D) gmain.create();
Start.actualState.render(g);
}
}