Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

23.10.2013, 17:09

Maus Input Problem in Java (lwjgl)

Hallo zusammen.
Ich arbeite an einem kleinen SpieleProjekt in Java und stehe momentan an einer für mich unlösbaren Aufgabe.

Ich benutze die public void update Methode um Mausklicks auf einen Zielbereich zu registrieren, um danach eine Aktion auszuführen.

Quellcode

1
2
3
4
5
6
7
if (Mouse.isButtonDown(0)){

if((posX > 240 && posX < 439) && (posY > (fbildhoehe-10-71) && posY < (fbildhoehe-10))){

konsole.textEingabe("Hier steht ein test text.");
}
}


Mein Poblem ist, dass ich mehr als einen Mausklick zurück erhalte... und demnach in meiner "konsole" der text öfter angezeigt wird.
Ich möchte aber nur einen einzigen Mausklick bzw. den ersten Mausklick haben.

Ich habe versucht dieses zu umgehen indem ich nicht Mouse.IsButtonDown(0) benutze, sondern getEventButton und getEventButtonState.
Leider ohne Erfolg.

Über Vorschläge und Lösungsansätze würde ich mich sehr freuen.

Gruß
Mr Blood

Tobiking

1x Rätselkönig

  • Private Nachricht senden

2

23.10.2013, 17:29

Die Funktion sagt dir nicht ob geklickt wurde, sondern nur ob gerade die Maustaste gerade gedrückt ist. Ein Klick ist in der Regel ein vollständiger Zyklus: nicht gedrückt -> gedrückt -> nicht gedrückt. Da die Phasen beliebig lang sein können musst dir also merken wie der vorherige Stand war und entsprechend reagieren wenn er sich ändern.

3

24.10.2013, 08:32

Super vielen Dank !

Ich habe das Problem jetzt wie folgt gelöst.

Ich habe mir eine Variable in meiner ausführenden Klasse erstellt (int igedrueckt = 0;)
und danach eine Abfrage für die einzelnen "wechsel" gemacht.

Quellcode

1
2
3
4
5
6
if(Mouse.isButtonDown(0)){
            igedrueckt = 1;
        }
        if(igedrueckt == 1 && Mouse.isButtonDown(0)== false){
            igedrueckt = 2;
        }


Am Ende der Update-Methode, wenn die Variable 2 ist, setze ich sie wieder auf 0.

Vielen Dank und mit freundlichem Gruß

Mr.Blood

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

4

25.10.2013, 13:49

Hallo,

ich würde mir an deiner Stelle eine eigene Klasse schreiben, die von Mouse erbt und dann die Methode isPressed oder so selber implementieren.
Da bleibt der Code sauberer.

Gruß

db

5

04.11.2013, 22:23

Sorry, kommt bisschen spät :rolleyes:

Ich mach das mit diesem "Event"-basierten Ansatz:

Quellcode

1
2
                while (Mouse.next()) {
                }


Dann hat man nicht das Problem, dass der Mouse-Button über mehrere Durchgänge hinweg "down" oder "up" ist.

Werbeanzeige