Hi Community,
mal wieder eine Frage zu Java, dieses Mal zwecks Mausereignisbehandlung. Ich versuche mich gerade an einem Spiel mit JOGL und möchte nun Mausereignisse abfangen. Funktioniert auch bis zu einem gewissen Punkt ganz gut, leider bemerkt der Listener nur nicht, dass ein Mausbutton "released" wurde. Ich bin mir gerade nicht sicher wo sich ein Fehler eingeschlichen haben könnte, hier der notwendige Quelltext:
In der aufgerufenen "Game"-Klasse frage ich den Status dann folgendermaßen ab:
Sobald jedoch einmal ein Status erreicht wurde, wird er erst wieder bei einem Mausklick geändert und passt sich nicht an den wirklichen Status an. Der Status "NOBUTTON" wird also nur erreicht, bevor eine Maustaste gedrückt wurde.
Die Einrückung hats etwas zerrissen, nicht benötigter Code wurde entfernt.
Vielen Dank für Vorschläge im Voraus
MrCastle
mal wieder eine Frage zu Java, dieses Mal zwecks Mausereignisbehandlung. Ich versuche mich gerade an einem Spiel mit JOGL und möchte nun Mausereignisse abfangen. Funktioniert auch bis zu einem gewissen Punkt ganz gut, leider bemerkt der Listener nur nicht, dass ein Mausbutton "released" wurde. Ich bin mir gerade nicht sicher wo sich ein Fehler eingeschlichen haben könnte, hier der notwendige Quelltext:
Code:
public class SgameApplication implements KeyListener, MouseListener{
private Logger logger = null;
private Game defaultGame = null;
private int keyState = 0; // Welcher Buchstabe ist gedrückt
public MouseEvent mouse;
private GLCanvas canvas;
private static Animator animator;
// Fenster
// private JOGLFrame frame = new JOGLFrame("Shipgame");
private Frame frame = new Frame("Shipgame");
/**
* Standardkonstruktor
*/
public SgameApplication(){
// Logging
logger = Logger.getLogger("game logger");
String pattern = "%d{ISO8601} [%p] %m %n";
PatternLayout layout = new PatternLayout(pattern);
try{
FileAppender consoleAppender = new FileAppender(layout, "sgame.log");
logger.addAppender( consoleAppender );
logger.setLevel(Level.ALL);
} catch(Exception e){
e.printStackTrace();
}
// Fensterelemente entfernen
frame.setUndecorated(true);
// Hier Auflösung auslesen
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
DisplayMode dm = gd.getDisplayMode();
int w = dm.getWidth();
int h = dm.getHeight();
defaultGame = new Game(this, w, h);
// JOGL Code
canvas = new GLCanvas();
canvas.addGLEventListener(defaultGame);
canvas.addMouseListener(this);
frame.add(canvas);
animator = new Animator(canvas);
// Jogl Code Ende
frame.setBounds(0, 0, w, h);
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
animator.stop();
System.exit(0);
}
});
frame.setVisible(true);
animator.start();
}
/**
* Main Methode.
* @param args
*/
public static void main(String[] args) {
SgameApplication app = new SgameApplication();
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
this.keyState = e.getKeyCode();
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
this.keyState = 0;
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
public int getKeyState(){
return keyState;
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
mouse = e;
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
mouse = e;
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
mouse = e;
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
mouse = e;
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
mouse = e;
}
}
In der aufgerufenen "Game"-Klasse frage ich den Status dann folgendermaßen ab:
Code:
switch (gameApp.mouse.getButton()) {
case MouseEvent.BUTTON1:
break;
case MouseEvent.BUTTON2:
break;
case MouseEvent.BUTTON3:
break;
case MouseEvent.NOBUTTON:
break;
default:
break;
}
Die Einrückung hats etwas zerrissen, nicht benötigter Code wurde entfernt.
Vielen Dank für Vorschläge im Voraus
MrCastle