2Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
561
561
EMPFEHLEN
-
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:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
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:
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.Code :1 2 3 4 5 6 7 8 9 10 11 12
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
-
Was genau erwartest du denn? Ich meine bei einem mouse released gibt er dir auch immer den Button mit zurück, der vorher gedrückt war und nicht NO BUTTON. Bei mir gerade wurde der NOBUTTON Status nur gesetzt, wenn ich zum Beispiel in die Titelleiste geklickt hatte, ansonsten hatte ich immer einen Button zurück geliefert bekommen.
Gruß
Der Wolf
-
Ich denke das Problem hat nichts mit released etc. zu tun, sondern eher damit dass du in den Event-Funktionen mouseExited und mouseEntered auch "mouse=e" geschrieben hast. Diese werden nämlich ausgelöst, wenn die Maus ein Element betritt oder verlässt, und bei diesen Events ist es ja nicht zwingend notwendig, dass eine Maustaste gedrückt ist.
Lösch einfach mal das "mouse=e;" in den beiden Funktionen und du wirst kein NOBUTTON mehr haben.
-
Hi und danke für die Antworten. Ich erwarte, dass bei der Betätigung eines Mausbuttons nicht der gleiche Status erhalten bleibt, auch wenn der Button nicht mehr gedrückt wurde. Ich will ja nur einen Klick wahrnehmen und nicht mehr. Vielleicht ist das aber der falsche Ansatz.
Das war nur eine temporäre Spielerei, vorher hatte ich es nur in den anderen Methoden und diversen Kombinationen ohne "Entered" und "Exited", hat leider keine Auswirkung. Außerdem möchte ich ja den "NOBUTTON" Status erreichen, da ich im Grunde bei einem Klick eine entsprechende Anreihung von Aktionen ausführen möchte.
e: OK ich glaube ich habe meinen Denkfehler gefunden :-S
Die entsprechenden Methoden "mouseClicked" etc. werden ja bei einem Klick nur einmal ausgeführt... Da muss ich ansetzen, getButton gibt mir ja offensichtlich nur den letzten gedrückten Button zurück.
OK ich denke damit hat sichs erledigt
Werde es gleich mal testen.
Geändert von MrCastle (15.08.10 um 14:06 Uhr)
Ähnliche Themen
-
"if" ok gedrückt schreibe datei "else" mach nichts
Von Berlin_Ses4m im Forum PHPAntworten: 3Letzter Beitrag: 04.12.07, 10:36 -
MouseEvent in mouseDragged liefert keine Mouse-Taste (Linux)
Von Prophet05 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 15.11.07, 19:54 -
Ultra100 TX2 "Das Zeitlimit für die Semaphore wurde erreicht."
Von KlaDi im Forum Microsoft WindowsAntworten: 2Letzter Beitrag: 05.02.07, 18:29 -
Wenn ich "a" gedrückt habe solle "das" passieren-aber wie?!
Von -Gore- im Forum Visual Basic 6.0Antworten: 9Letzter Beitrag: 01.01.07, 20:02 -
link auf "enter" oder "esc" taste setzen?
Von Atti im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 24.08.05, 01:41





Zitieren
Login





