Tastenabfragen: Flushkeys, KeyHit

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

MisterMaboo

Betreff: Tastenabfragen: Flushkeys, KeyHit

BeitragMo, Jun 28, 2010 16:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute.

irgendjemand hat mir mal den tipp gegeben, tastenabfragen am anfang der hauptschleife in eine variable zu speichern und dann immer wieder diese variable zu überprüfen (ich weiß nicht mehr genau womit das begründet wurde). bis jetzt hat mir das keine schwierigkeiten gemacht, klappte prima. bis jetzt!

das problem dabei ist ganz einfach: ich benutze FlushKeys. wenn ich das jetzt aber am ende jeder schleife z.B. einmal mache, dann funktioniert die tastenabfrage mittels der variable nicht mehr richtig.

ein beispiel zum verdeutlichen meines problems:

Code: [AUSKLAPPEN]

Repeat
KH_W=KeyHit(17)

If KH_W Then
...
EndIf


FlushKeys
Forever


so wars gemeint. mein code ist jetzt um ein vielfaches komplexer ( Very Happy ); das problem macht sich insofern bemerkbar dass ich die taste 'I' manchmal doppelt oder dreifach drücken muss bis sich das inventar endlich öffnet

meine frage:

tastenabfragen am anfang der schleife in variablen speichern oder nicht?
wie genau entsteht das problem?
Man is the information he carries
  • Zuletzt bearbeitet von MisterMaboo am Mo, Jun 28, 2010 16:39, insgesamt 2-mal bearbeitet

relentless92

BeitragMo, Jun 28, 2010 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Const W = 17

[...]

If Keyhit(W) Then

[...]


Wieso nicht so? Wenn ich dich richtig verstanden habe Very Happy
~
Fussball spielen viele, Kart fahren nur die Besten.
~

MisterMaboo

BeitragMo, Jun 28, 2010 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
weil ich meine zu erinnern dass mir der tippgeber erklärt hat, dass man im laufe einer schleife denselben scancode nur einmal überprüfen kann, oder etwas in der richtung.

ich möchte bloß wissen, ob das unsinn ist, das mit dem flushkeys hab ich gelöst, auch wenn ich nicht verstehe warum es jetzt klappt

EDIT:

für alle die diesen thread unter großen umständen mal finden sollten:

das problem habe ich gelöst indem ich das flushkeys hinter die tastenabfragen gesetzt habe:

Code: [AUSKLAPPEN]

...
Repeat

KD_W=KeyDown(17)
KD_A=KeyDown(30)
KD_D=KeyDown(32)
KD_SHIFT=KeyDown(42)
...
FlushKeys

...
If KD_W Then...
...

Flip
Forever

Man is the information he carries
  • Zuletzt bearbeitet von MisterMaboo am Mo, Jun 28, 2010 16:36, insgesamt einmal bearbeitet

Holzchopf

Meisterpacker

BeitragMo, Jun 28, 2010 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
@relentless: Weil genau das falsch ist, falls man eine Taste in einer Schleife mehrmals abfragen möchte (Begründung: Siehe unten).

@MisterMaboo: FlushKeys löscht den Tastaturpuffer. Das heisst konkret: Jede Taste, die du währen dem KeyHit am Anfang der Schleife und zwischen dem Aufruf von FlushKeys drückst, wird wieder aus dem Puffer gelöscht und somit beim nächsten KeyHit nicht registriert. Es werden nur diejenigen registriert, die du zwischen FlushKeys und KeyHit tätigst (wahrscheinlich steht da noch ein Flip dazwischen, weshalb es dir erst möglich ist, überhaupt Tasten zu registrieren.

Der Grund, wieso man das mit der Variable so macht, ist folgender: KeyHit (und MouseHit) geben die Anzahl Tastenanschläge seit dem letzten Aufruf von KeyHit (oder MouseHit oder FlushKeys resp. FlushMouse) zurück. Benutzt man also die Funktion zweimal direkt hintereinander, so sieht in der Regel nur die erste Funktion noch Tastenanschläge, die nächsten sehen nix mehr. Es sei denn, man drückt im richtigen Moment.

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Neoxit

BeitragMi, Jun 30, 2010 3:20
Antworten mit Zitat
Benutzer-Profile anzeigen
@MisterMaboo

Das liegt aber auch nur daran das du in deinem jetzigen Code KeyDown() nutzt und nicht wie zuvor beschrieben KeyHit() Rolling Eyes

MisterMaboo

BeitragMi, Jun 30, 2010 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
hat damit rein gar nichts zu tun. ich wollte nur nicht meine komplette tastenabfrage posten.

zum öffnen des inventars wird der tastendruck 'I' überprüft.
Man is the information he carries

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group