[OIS] Kleines Input-Problem

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Halan
Beiträge: 73
Registriert: 22.01.2005, 21:47
Benutzertext: programmiersüchtig
Echter Name: Kai Mast
Wohnort: Freak City
Kontaktdaten:

[OIS] Kleines Input-Problem

Beitrag 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.
Benutzeravatar
Sternmull
Establishment
Beiträge: 264
Registriert: 27.04.2007, 00:30
Echter Name: Til
Wohnort: Dresden

Re: Kleine Input-Problem

Beitrag 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.
Halan
Beiträge: 73
Registriert: 22.01.2005, 21:47
Benutzertext: programmiersüchtig
Echter Name: Kai Mast
Wohnort: Freak City
Kontaktdaten:

Re: Kleine Input-Problem

Beitrag 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?
Benutzeravatar
Sternmull
Establishment
Beiträge: 264
Registriert: 27.04.2007, 00:30
Echter Name: Til
Wohnort: Dresden

Re: Kleine Input-Problem

Beitrag 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.
Halan
Beiträge: 73
Registriert: 22.01.2005, 21:47
Benutzertext: programmiersüchtig
Echter Name: Kai Mast
Wohnort: Freak City
Kontaktdaten:

Re: Kleine Input-Problem

Beitrag 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.
Benutzeravatar
Sternmull
Establishment
Beiträge: 264
Registriert: 27.04.2007, 00:30
Echter Name: Til
Wohnort: Dresden

Re: Kleine Input-Problem

Beitrag 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.
Halan
Beiträge: 73
Registriert: 22.01.2005, 21:47
Benutzertext: programmiersüchtig
Echter Name: Kai Mast
Wohnort: Freak City
Kontaktdaten:

Re: Kleine Input-Problem

Beitrag 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
Benutzeravatar
BeRsErKeR
Establishment
Beiträge: 689
Registriert: 27.04.2002, 22:01

Re: Kleine Input-Problem

Beitrag 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?
Ohne Input kein Output.
Antworten