mmofacts.com

Javascript: keydown

gepostet vor 14 Jahre, 3 Monate von mltom

Ich hab ein nerviges Prob mit dem JavaScript eventhandler onkeydown.

Hier ein einfaches Script, um es mal zu veranschaulichen.

http://tom.noackorama.de/z_mine/aa_moveproblem.html

Es geht um die Verzögerung  bei gedrückter Taste nach dem ersten Eintritt des events.

Vielleicht hat von Euch einer ne Idee, die ich vor lauter Bäumen nicht sehe.

gepostet vor 14 Jahre, 3 Monate von knalli

Ich habe hier keine Verzögerung, Safari4.

Womit testest du denn? Mit Firefox? Gar mit aktiviertem Firebug?

gepostet vor 14 Jahre, 3 Monate von mltom

FF und IE auf win xp

Bei mir siehts so aus:

Move, 1, 2, 3, 4, 5, Move, 6, Move, 7, Move, ...

2,3,4,5 ist die anfängliche unerwünschte Verzögerung bei gedrückt gelassener Taste.

gepostet vor 14 Jahre, 3 Monate von Bringer

Original von knalli

Ich habe hier keine Verzögerung, Safari4.

Womit testest du denn? Mit Firefox? Gar mit aktiviertem Firebug?

Safari, FF, IE, Chrome und Opera - immer diesselbe Verzögerung.

Der erste Schritt ist immer gleich langsam - alle kommenden sind schnell.

Ob Firebug oder nicht macht keinen Unterschied

gepostet vor 14 Jahre, 3 Monate von Kallisti

Das liegt aber am Tastaturtreiber und nicht am Javascript. Öffne mal einen Texteditor und halt eine Taste gedrückt und du siehst genau dasselbe Phänomen. Ist imho dafür da, dass beim normalen Tippen auch Leute, die die Taste etwas länger gedrückt halten keine Doublehits generieren.

D.h. es wird gar kein Event/Interrupt vom Hardwaretreiber erzeugt, dann kann auch im Javascript nix ankommen. Die Lösung dafür läge eher auf Betriebssystemebene. In einem Browsergame hast du da allerdings keinen Zugriff drauf.

Was du natürlich machen kannst, ist den timer zu zählen und beim 2ten triggern draufzuaddieren, aber ich glaube das ist für die User weniger transparent und verständlich als das normale Verhalten. Dadurch wird die Bewegung gleichmäßig, aber die Visualisierung hat weiterhin einen Hüpfer.

Die Lösung ist es wahrscheinlich nur das erste keydown/keypress event abzufangen, dann mit einem frei definierbaren, internen Timer die Bewegung zu machen bis das keyup event feuert. Dann kann es allerdings passieren, dass eine Bewegung um genau ein Feld sehr schwierig wird. Am elegantesten ist es wohl, wenn dein interner Timer dabei recht langsam startet und sukzessive beschleunigt, wie z.B. die Maus unter OSX.

gepostet vor 14 Jahre, 3 Monate von Redrick

führe doch beim ersten keydown die step-funktion aus und setze gleichzeitig ein setInterval. Mit delaywerten musst du bissel rumspielen.

sobald ein keyUp kommt, machst du clearInterval

das dürfte die verzögerung eigentlich vermeiden

hab nicht getestet

gepostet vor 14 Jahre, 3 Monate von mltom

@Kallisti: Ja, da hast du recht. Im Text-Editor ist es genauso.

Also auf die harte Tour.

Dann bleibt mir wohl nichts anderes übrig, als mit setInterval und keyup zu versuchen die Verzögerung abzufangen...

Aber: Geht nicht, gibts nicht :)

Danke fürs Feedback.

gepostet vor 14 Jahre, 3 Monate von buhrmi

Original von mltom

Dann bleibt mir wohl nichts anderes übrig, als mit setInterval und keyup zu versuchen die Verzögerung abzufangen...

das ist die standard-tour. nicht die harte tour :D

gepostet vor 14 Jahre, 3 Monate von Kallisti

Original von mltom

@Redrick: Mit Interval und keyup.

Funzt jetzt so, wie ich mir das vorgestellt habe.

Thanx.

(Die Testseite ist schon aktualisiert)

http://tom.noackorama.de/z_mine/aa_moveproblem.html

Naja, ist aber wie ich es beschrieben hatte so, dass er wenn man nicht genau aufpasst nur kurz anzutippen sofort 3-4 Schritte auf einmal macht... Ich würde wirklich mit größerem Interval anfangen und dann eine Beschleunigung einbauen.

gepostet vor 14 Jahre, 3 Monate von mltom

Der Test hat ein delay von 50ms.

Die Mine eins von 200. Also, so schnell wie im Test wirds im Spiel eh nicht.

Das war ja erstmal nur das erste Problem :)

Aber eben dafür hatte ich keine Idee.

Wie ich jetzt die wichtel-mine

http://tom.noackorama.de/z_mine/index.html

anpassen kann, das ist dann was ganz anderes.

Mein Hauptärgernis ist, wenn man unter einem Fallelement steht und mit gedrückter Taste nach unten läuft, wird man erschlagen.

Kann man am besten in L3 testen (mit vorher Stein verschieben).

Mit schnell tippen und dann drücken aber kein Problem...

Da muss ich jetzt erstmal rumprobieren, wie es am besten funzt.

gepostet vor 14 Jahre, 3 Monate von mltom

Da hatte Kallisti recht.

Die Verzögerung lässt sich beim Laufen in eine Richtung (2. Schritt) abfangen und anpassen, beim Abbiegen (neues Event) tritt sie aber wieder auf und damit ist die Steuerung nicht wirklich gut zu handhaben.

Nach 5 verschiedenen Ansätzen hab ich aufgegeben, und mache jetzt ne alternative Mouse-Steuerung für die Wichtel-Mine.

Ist ja nicht so dramatisch, denn spielbar waren auch vorher schon alle Level.

Trotzdem, Danke an alle.

Auf diese Diskussion antworten