Laden...

Verzögerte Tasteneingabe

Erstellt von Remling vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.207 Views
R
Remling Themenstarter:in
48 Beiträge seit 2013
vor 9 Jahren
Verzögerte Tasteneingabe

Hallo,
ich habe bei einem Programm die eingabe also das Drücken bestimmter Tasten mit
Console.ReadKey().KeyChar.ToString();
jedoch wenn jemand jetzt die Taste gedrückt hält wird dies natürlich immer wieder abgespeichert da sich der input in einer While(true) schleife befindet
meine frage
Kann man die Tasteneingabe verlangsamen das sozusagen auch wenn die Taste durchgehend gedrückt wird er dies trotzdem nur alle 0.3 sec abspeichert oder so?
mit System.Threading.Thread.Sleep(~); funktioniert es nicht da er die eingabe nur verzögert und dann auf einmal alles "nachholt"
lg Remling

WHAT DOES THE FOX SAYS

82 Beiträge seit 2014
vor 9 Jahren

Hallo,

Ja, Systemsteuerung in Windows.
Sollte der einfachste Weg sein. (solange es andere Anwendungen nicht stört) Du müsstest ja sonst die komplette Tastatureingabe in deinem Projekt umschreiben.

Gruß schnelleHelga

T
314 Beiträge seit 2013
vor 9 Jahren

Hmmm Du kannst dir statt zu warten einfach, nach erfolgreicher Eingabe eines Zeichens, in einen Zustand wechseln, wo du eben keine Eingabe annimmst. (oder nur das letzte Zeichen nicht erneut annimmst)

Was machst Du denn wenn der Nutzer tatsächlich so schnell tippt? 300ms klingt erstmal sehr lange ^^.

Vielleicht ist es aber sinnvoller zu prüfen, ob die Taste wieder losgelassen wurde statt den User irgendwie versuchen einzuschränken.

82 Beiträge seit 2014
vor 9 Jahren

Sorry,

hab jetzt erst gemerkt, dass es nicht zwingend um Windows gehen muss.

Könnte nicht auch das gedrückt halten gewollt sein?
Da fehlt uns jetzt natürlich die Information um welche Tastatureingaben es sich handelt (Text, Steuerung usw.).
und was wird mit den Zeichen, die Du nicht speichern/verarbeiten willst? Wer entscheidet, welche Tastendruck gewollt war und welcher nicht?

schnelleHelga

R
Remling Themenstarter:in
48 Beiträge seit 2013
vor 9 Jahren

es handelt sich um die eingabe zur steuerung eines objektes weshalb es auch egal ist ob der beutzer die tasts gedrückt hält oder nur schnell drückt, nur eben durch das gedrückt halteb fängt es an zu flackern da sich das objekt zu oft bewegt deshalb möchts ich eben wenn ein benutzer eine taste drückt (gedrückt hält) die taste nach der ersten eingabe kurz "sperren" für eine kurze zeit und dann wieder freigeben

WHAT DOES THE FOX SAYS

82 Beiträge seit 2014
vor 9 Jahren

Du solltest die Eingabe (Tasten) und die Anzeige trennen. Bau Dir einen definierten (zeitlichen) Rahmen, in dem Deine Anzeige läuft. Egal wie oft oder wie lang eine Taste gedrückt wird/wurde, musst Du die Tastencodes trotzdem auslesen und verarbeiten, weil jede gedrückte Taste im Puffer liegt. wenn Du nur alle 300ms einen Tastendruck verarbeiten willst, musst Du eben zu diesem Zeitpunkt alle bis dahin eigehenden Tasten verarbeiten. Das ist dann Teil Deiner Spiellogik, ob Dein Objekt eben eine oder mehrere Einheiten pro Zeiteinheit bewegt wird.
Mit der Anzeige sollte das nicht viel zu tun haben.

schnelleHelga