J
javaschreiberling
Gast
Hallo Leute,
ich hab ein kleines Spiel geschrieben. Ich verwende für das Spiel ein Canvas aus dem AWT, welches
in einer JPanel eingebettet in einem JFrame angezeigt wird, um auch noch andere Dinge anzeigen zu können (wie
Hauptmenü z.B.). Mein Problem ist, dass das Spiel nach einem Deaktivieren des Fensters auf keine Tastatureingaben mehr reagiert (die Threads laufen weiter, nur reagiert nichts mehr auf Tastatureingaben). Woran könnte das liegen? Ich verwende nur die Methoden keyPressed() und keyReleased(). Hier ein kleiner Auszug aus meinem Quelltext:
ich hab ein kleines Spiel geschrieben. Ich verwende für das Spiel ein Canvas aus dem AWT, welches
in einer JPanel eingebettet in einem JFrame angezeigt wird, um auch noch andere Dinge anzeigen zu können (wie
Hauptmenü z.B.). Mein Problem ist, dass das Spiel nach einem Deaktivieren des Fensters auf keine Tastatureingaben mehr reagiert (die Threads laufen weiter, nur reagiert nichts mehr auf Tastatureingaben). Woran könnte das liegen? Ich verwende nur die Methoden keyPressed() und keyReleased(). Hier ein kleiner Auszug aus meinem Quelltext:
Code:
/*
* @(#) SpaceShip.java
*
* Urheberrechtlich geschützt.
* Alle Rechte vorbehalten.
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* @version 2.00
*/
public class SpaceShip extends JFrame implements KeyListener, MouseListener, WindowListener, Runnable {
private boolean isMenu, isOption, gamePause, setSound, setText, setBackgrnd, setGameRslts;
private SpaceCanvas gameCanvas;
private SpaceMenu menuCanvas;
private SpaceBox soundBox, textBox, backgrndBox, gameRsltsBox;
private SpaceButton button, cancel, close;
private SpaceHighscore highscoreCanvas;
private JPanel optionPanel, gamePanel, menuPanel, highscorePanel;
public SpaceShip() {
setTitle("JPKI Space Ship");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
setSize(640,480);
setLocation((dim.width-getSize().width)/2,(dim.height-getSize().height)/2);
setResizable(false);
optionPanel = new JPanel();
optionPanel.setLayout(null);
optionPanel.setBackground(Color.black);
optionPanel.setSize(640,480);
gamePanel = new JPanel();
gamePanel.setLayout(new BorderLayout());
gamePanel.setSize(640,480);
menuPanel = new JPanel();
menuPanel.setLayout(new BorderLayout());
menuPanel.setSize(640,480);
highscorePanel = new JPanel();
highscorePanel.setLayout(null);
highscorePanel.setBackground(Color.black);
highscorePanel.setSize(640,480);
isMenu = true;
isOption = false;
gamePause = false;
setSound = true;
setText = true;
setBackgrnd = true;
setGameRslts = true;
gameCanvas = new SpaceCanvas();
menuCanvas = new SpaceMenu();
button = new SpaceButton("button.gif","button_selected.gif");
cancel = new SpaceButton("cancelbutton.gif","cancelbutton_selected.gif");
close = new SpaceButton("closebutton.gif","closebutton_selected.gif");
//Weitere Initalisierungen, die ich weggelassen hab
optionPanel.add(soundBox);
optionPanel.add(textBox);
optionPanel.add(backgrndBox);
optionPanel.add(gameRsltsBox);
optionPanel.add(button);
optionPanel.add(cancel);
soundBox.setLocation(20,40);
textBox.setLocation(20,110);
backgrndBox.setLocation(20,180);
gameRsltsBox.setLocation(20,250);
button.setLocation(185,350);
cancel.setLocation(335,350);
close.setLocation(260,350);
gamePanel.add(gameCanvas,BorderLayout.CENTER);
menuPanel.add(menuCanvas,BorderLayout.CENTER);
highscorePanel.add(highscoreCanvas);
highscorePanel.add(close);
getContentPane().add(menuPanel);
button.addMouseListener(this);
cancel.addMouseListener(this);
close.addMouseListener(this);
addKeyListener(this);
addWindowListener(this);
menuCanvas.start();
setVisible(true);
}
public void keyPressed(KeyEvent e) {
if (isMenu & e.getKeyCode() == 10)
checkOption();
else if (isMenu)
menuCanvas.keyPressedWhileMenu(e);
else if (isOption)
keyPressedWhileOptionMenu(e);
else if (!isMenu & !isOption & (char) e.getKeyCode() == 'P')
gamePause(true);
else if (!isMenu & !isOption & e.getKeyCode() == 10 & gameCanvas.getCurrentMenuOption() == SpaceCanvas.EXIT_OPTION)
cancelGame();
else
gameCanvas.keyPressedWhileGame(e);
}
public void keyReleased(KeyEvent e) {
if (!isMenu & !isOption)
gameCanvas.keyReleasedWhileGame(e);
}