Seite 1 von 1

[OIS] Kleines Input-Problem

Verfasst: 21.11.2010, 14:08
von Halan
Ahoi,

ich schriebe zurzeit an dem Input/Bewegungssystem meines spiels. Dabei gehe ich wie folgt vor. Ein Objekt hat 3 Parameter: Position, Rotation und eine bool-Wert der aussagt ob es in Bewegung ist. Diesen bool wert setzte ich je nachdem ob ein Knopf gedrückt bzw. losgelassen wurde.

Jetzt das Problem: Wenn man einen Knopf gedrückt hält wird nicht ein Keypress-Event ausgelöst sonder nach einer zeit ein intervall von Keypress/Keyrelease Events. Wie kann ich das umgehene?

Ich benutze OpenInputSystem als Schnittstelle zum OS.

mit freundlichen Grüßen
Halan

Edit von Seraph: Thread-Titel praezisiert.

Re: Kleine Input-Problem

Verfasst: 21.11.2010, 17:11
von Sternmull
Und da bist du dir auch wirklich ganz sicher? Als ich vor langer Zeit was mit OIS gemacht hab sah ich mich gezwungen die Tastenwiederholung manuell einzubauen weil so was eben nicht direkt in OIS vorhanden war. Daran scheint sich bis heute auch nichts geändert zu haben. Das entnehme ich zumindest diesem Thread der nur ein paar Monate alt ist.

Das Ergebnis meiner Bastelei mit OIS hatte übrigens ein Input-System zum Ergebnis das mehr "high level" ist als OIS selbst. Deshalb wurde es auch AOIS (für Abstract OIS) getauft. Der Code wurde auch im Splatterwelten Projekt verwendet (an dem ich aber sonst nicht beteiligt war) und ist in dem Download enthalten. Evtl. bringt es dir ja was wenn du dort mal einen Blick drauf wirfst.

Re: Kleine Input-Problem

Verfasst: 21.11.2010, 18:01
von Halan
Sternmull hat geschrieben:Und da bist du dir auch wirklich ganz sicher? Als ich vor langer Zeit was mit OIS gemacht hab sah ich mich gezwungen die Tastenwiederholung manuell einzubauen weil so was eben nicht direkt in OIS vorhanden war. Daran scheint sich bis heute auch nichts geändert zu haben. Das entnehme ich zumindest diesem Thread der nur ein paar Monate alt ist.
Komisch. Ich benutze das ganze unter Linux vielleicht verhält es sich unter Windows anders?

Re: Kleine Input-Problem

Verfasst: 21.11.2010, 18:07
von Sternmull
Falls ja ist es wahrscheinlich ein Bug. Im OIS-Forum kann dir da wahrscheinlich eher geholfen werden als hier. Soweit ich mich erinnere hab ich es bisher nur unter Windows verwendet.

Re: Kleine Input-Problem

Verfasst: 21.11.2010, 18:08
von Halan
Danke für deine Hilfe. Hab schon eine Zeile Code gefunden die mir geholfen hat!

Code: Alles auswählen

   paramList.insert(std::make_pair(std::string("XAutoRepeatOn"), std::string("false")));
Update: Das richtig dumme daran ist halt dass OIS das für meine ganze Session setzt. Das heisst läuft mein Programm in diesem Modus funktionieren die anderen Programme nicht mehr wie gewohnt.

Re: Kleine Input-Problem

Verfasst: 21.11.2010, 18:28
von Sternmull
Hast du mal getestet ob OIS::Keyboard::isKeyDown() und OIS::Keyboard::copyKeyStates() auch durch das Keyrepeat beeinflusst werden? Wenn nicht könntest du es ja an lassen und den Tasten-Status statt den Ereignissen auswerten. Für Tastatureingabe ist das normalerweise kein Problem.

Re: Kleine Input-Problem

Verfasst: 21.11.2010, 18:30
von Halan
Sternmull hat geschrieben:Hast du mal getestet ob OIS::Keyboard::isKeyDown() und OIS::Keyboard::copyKeyStates() auch durch das Keyrepeat beeinflusst werden? Wenn nicht könntest du es ja an lassen und den Tasten-Status statt den Ereignissen auswerten. Für Tastatureingabe ist das normalerweise kein Problem.
Will ich aber eigentlich nicht. Will mein Programm so Event-Orientiert wie möglich entwickeln.

Scheint wohl eher eine einschränkung im XServer zu sein. Vielleicht sollte ich das mal als Bug melden.


Udpate: Es gibt eine Funktion um das Richtig zu machen. OIS benutzt sie aber nicht http://linux.die.net/man/3/xkbsetdetectableautorepeat

Re: Kleine Input-Problem

Verfasst: 29.11.2010, 00:24
von BeRsErKeR
Wenn du anfängt die Taste gedrückt zu halten sollte doch mindestens ein KeyPress-Event am Anfang kommen und erstmal kein KeyRelease-Event. Da setzt du den bool einfach auf true und am Ende des Gedrückthaltens kommt ja sicher auch ein KeyRelease-Event wo du das bool auf false setzen kannst. Ob das zwischendrin mal kurz zwischen true und false wechselt sollte nicht weiter tragisch sein, oder doch?