Wiederholten Tastenanschlag deaktivieren

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Ich bin dabei ein kleines Spiel zu programmieren, in dem man sich mit den WASD Tasten bewegen kann. Mein Problem ist, dass sich nach langem Drücken einer Bewegungstate der automatische Tastenanschlag einstellt.

Meine bisherige Lösung war, dass ich die überflüssigen Tastenanschläge einfach droppe. Eleganter fände ich es jedoch, wenn dieser wiederholte Tastenanschlag gar nicht erst auftreten würde.

schönen Dank schonmal im Voraus
MfG
 
G

Guest

Gast
Hat vielleicht jemand einen Tip für mich wo ich ansetzen kann?
 

Zwackelmann

Mitglied
Die Methode keyTyped kann ich nicht benutzen - nur keyPressed. Ich möchte ja, dass sich mein Spieler bewegt, wenn die Taste gedrückt wird und stehen bleibt, wenn die Taste wieder losgelassen wird (keyReleased).

Ich denke nicht, dass eine Änderung an diesen Methoden etwas ändert, da sie ja schon aufgerufen geworden sind, wenn der automatische Tastenanschlag einsetzt.

Ich denke eher, dass man etwas tiefer ansetzen muss, da der automatische Tastenanschlag ja auch Aufgabe des Betriebssystems ist... also vielleicht in der System-Klasse? In dieser bin ich bis jetzt noch nicht fündig geworden
 

Marco13

Top Contributor
Wenn man eine Taste drückt, laaaange festhält, und dann losläßt, sollte (wenn ich mich nicht irre) sowas kommen wie
KEY_PRESSED
KEY_TYPED
KEY_TYPED
KEY_TYPED
KEY_TYPED
KEY_TYPED
KEY_RELEASED
(... oder sind da immer noch KEY_PRESSEDs dazwischen ???:L weiß grad nicht), jedenfalls kannst du bei KEY_PRESSED ein flag setzen, das erst bei KEY_RELEASED wieder gelöscht wird... damit müßte man das hinkriegen...
 

Zwackelmann

Mitglied
Ich hab mal ein kleines Programm geschrieben, was das testen sollte:
Code:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;


public class KeyTest extends JFrame implements KeyListener
	{
	public static final long serialVersionUID = -3939399393993l;
	
	@Override public void keyPressed(KeyEvent e) 	{System.out.println("KeyPressed");}
	@Override public void keyReleased(KeyEvent e) 	{System.out.println("KeyReleased");}
	@Override public void keyTyped(KeyEvent e) 	{System.out.println("KeyTyped");}
	
	public KeyTest()
		{
		super("KeyTest");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		addKeyListener(this);
		}
	
	public static void main(String[] args)
		{
		new KeyTest().setVisible(true);
		}
	}

Ausgabe bei lange gedrückter Taste ist:
KeyPressed
KeyPressed
KeyPressed
KeyPressed
KeyPressed
KeyPressed
KeyReleased
Also kein KeyTyped dazwischen.
Das mit dem "Flag setzten" mache ich bis jetzt schon so ähnlich. Wenn meine Spielfigur den Befehl bekommt nach rechts zu gehen und sie geht schon rechts, wird der Befehl einfach ignoriert.
Ich finde die Lösung aber wie gesagt nur mäßig elegant.
 

Wildcard

Top Contributor
Zwackelmann hat gesagt.:
Ausgabe bei lange gedrückter Taste ist:
...
Also kein KeyTyped dazwischen.
Ob ein keyTyped Event generiert wird, oder nicht, hängt vom der Art des KeyEvents ab (welche Tasten). Die API-Doc sagt dazu allerdings alles wissenswerte.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Alte Frame-Größe beim wiederholten Aufruf AWT, Swing, JavaFX & SWT 5
MaRkElE KeyListener Verzögerung deaktivieren AWT, Swing, JavaFX & SWT 1
G JavaFX Wie kann ich alle Objekte außer eins deaktivieren (das Gleiche mit BoxBlur)? AWT, Swing, JavaFX & SWT 11
missy72 JavaFX CellFactory deaktivieren, oder löschen AWT, Swing, JavaFX & SWT 2
L Swing Fehlerton deaktivieren? AWT, Swing, JavaFX & SWT 4
B Swing JButton deaktivieren, wenn nicht alle JTextFields ausgefüllt sind. AWT, Swing, JavaFX & SWT 2
K JavaFX DatePicker - Tage aktivieren/deaktivieren AWT, Swing, JavaFX & SWT 1
L Javafx Datepicker Zukunft deaktivieren AWT, Swing, JavaFX & SWT 3
A Touch-Display deaktivieren (Zeitabhängig) AWT, Swing, JavaFX & SWT 3
F jTabbedPane Tabwechsel deaktivieren AWT, Swing, JavaFX & SWT 2
V RadioButton aktivieren/deaktivieren; Zustand abfragen und wechseln AWT, Swing, JavaFX & SWT 2
C Swing ComboBox - ActionListener deaktivieren AWT, Swing, JavaFX & SWT 2
G JButton deaktivieren greift nicht AWT, Swing, JavaFX & SWT 14
M jtabbedpane aktivieren/deaktivieren AWT, Swing, JavaFX & SWT 13
T Listener in anderen Panel deaktivieren AWT, Swing, JavaFX & SWT 3
J JButtons in aktivieren und deaktivieren AWT, Swing, JavaFX & SWT 3
A LookAndFeel Rollover Effekt bei JTabbedPane deaktivieren (Nimbus) AWT, Swing, JavaFX & SWT 8
M SWT - Fenster "Deaktivieren" AWT, Swing, JavaFX & SWT 2
E Buttons während einer Berechnung deaktivieren AWT, Swing, JavaFX & SWT 6
M Swing JTabbedPane Panels deaktivieren AWT, Swing, JavaFX & SWT 2
T JFileChooser - "Öffnen-Button" aktivieren/deaktivieren möglich??? AWT, Swing, JavaFX & SWT 2
Y JRadioButton soll JTextBox aktivieren UND deaktivieren AWT, Swing, JavaFX & SWT 3
B SWT Buttons aktivieren/deaktivieren AWT, Swing, JavaFX & SWT 3
C Checkbox in Liste deaktivieren und paintComponent explizit aufrufen AWT, Swing, JavaFX & SWT 12
T JmenuItems in JPopupMenu kontextabhängig deaktivieren AWT, Swing, JavaFX & SWT 2
K JToggleButton deaktivieren (komplettes event nehmen) AWT, Swing, JavaFX & SWT 2
T JTable: editieren bei Doppelklick deaktivieren, aber... AWT, Swing, JavaFX & SWT 2
algorismi Knoten im JTree deaktivieren AWT, Swing, JavaFX & SWT 4
L Fenster inaktiv setzen / deaktivieren (unable to close window) AWT, Swing, JavaFX & SWT 16
G Swing Fortschrittsbalken im Fenster: Menü deaktivieren / abfangen? AWT, Swing, JavaFX & SWT 27
André Uhres Swing Alle Komponenten eines JPanel aktivieren/deaktivieren AWT, Swing, JavaFX & SWT 4
multiholle [JProgressBar] Raster deaktivieren AWT, Swing, JavaFX & SWT 14
M ALT shortcut für JMenuBar deaktivieren AWT, Swing, JavaFX & SWT 3
I JList - Einträge deaktivieren AWT, Swing, JavaFX & SWT 2
V Menüeinträge im DropDown-Menü deaktivieren AWT, Swing, JavaFX & SWT 3
A JList deaktivieren AWT, Swing, JavaFX & SWT 2
Tom299 JTable - Spalten verschieben deaktivieren? AWT, Swing, JavaFX & SWT 3
D JFrame schließen-Button deaktivieren AWT, Swing, JavaFX & SWT 4
N Alle Komponenten eines JPanel aktivieren/deaktivieren? AWT, Swing, JavaFX & SWT 5
G button deaktivieren AWT, Swing, JavaFX & SWT 3
S TAB Taste ändern in Enter und deaktivieren im jTextField AWT, Swing, JavaFX & SWT 5
R Swing - JTable Multiselect deaktivieren AWT, Swing, JavaFX & SWT 2
C Combo-Box deaktivieren AWT, Swing, JavaFX & SWT 4
G JDialog schliessen deaktivieren AWT, Swing, JavaFX & SWT 7
G JRadioButton deaktivieren? AWT, Swing, JavaFX & SWT 6
S TableCellRenderer deaktivieren AWT, Swing, JavaFX & SWT 13
M JTextPane - Zeilenumbruch verhindern stoppen deaktivieren :) AWT, Swing, JavaFX & SWT 5
U komplette JMenuBar deaktivieren? AWT, Swing, JavaFX & SWT 4
H Komponenten deaktivieren AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben