Zum Inhalt springen

DirectInput + Button gedrück ???


maddin

Empfohlene Beiträge

hallo,

ich habe mal wieder eine frage. diesmal zum thema direct input. und zwar habe ich ein programm, welches den status (button gedrückt, ...) eines joysticks (in meinem fall pcdash2) abfragen soll. ich habe es soweit geschaft bis zu der funktion CreateDevice. zumindest liefer mir diese DI_OK. nun aber möchte ich abfragen, ob ein button gedrückt wurde, ... . nach nun mehr zwei tagen des versuchens und raten habe ich gedacht und frage einmal ob vielleicht einer von euch weiß, wie ich abfragen kann, ob ein button gedrückt wurde.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich habe sowas zwar noch nicht programmiert, aber mich hat das interessiert, weil ich auch bald in OpenGL und/oder DirectX etwas rumprogrammieren will und so habe ich mich ein wenig schlau gemacht:

joySetCapture() frägt nur 3-Achsen Joysticks ab und erlaubt keine erweiterten Geräte-> aber hier wird das Fenster bei Joystickänderungen mit aktuellen echtezeite-States und Messages vollgepumpt. Soweit möglich sollte man diese Abfragemöglichkeit nicht verwenden. Laut DX-Developers.

Da bei 3D-Spielen nicht immer flüssigen Frameraten erreicht werden, bwz. diese ständig variieren sollte man lieber den Joystick "pollen" mit folgender Funktion:

joyGetPosEx() supported bis 32 Buttons, 6 Achsen und POV-Head für digitale und analoge Devices.

WINMM.LIB und MMSYSTEM.H müssen erst mal included werden.

joyGetPosEx(JOYSTICKID1); // Initialisierung

JOYINFOEX joyInfoEx;

ZeroMemory(joyInfoEx, sizeof(joyInfoEx);

joyInfoEx.dwSize = sizeof(joyInfoEx);

BOOL JoyPresent = (joyGetPosEx(JOYSTICKID1, &joyInfoEx) == JOYERR_NOERROR); //Abfragen ob überhaupt Treiber oder Joystick vorhanden sind

Calibrieren des Joysticks:

WinExec("control joy.cpl," SW_NORMAL);

Die "Dead Zone" ist ein im Ruhe-Bereich des Joysticks in dem man "gerade fliegt" oder halt "steht" . Die Joysticks sind jedoch so empfindlich, daß man einen größeren Bereich als Dead-Zone definieren muß, damit die Figur nicht wie wild hin- und her-zittert. Das JOY_USEDEADZONE-Flag wird automatisch von joyGetPosEx() mit einem normalwert initialisiert. Ansonsten muß man halt einfach eine Bereichsabfrage machen und diese aus den Polls rausrechnen, damit innerhalb der Dead-Zone alle Polls rausgefiltert werden und keine Aktionen auslösen.

REGSTR.H muß für eigenständige Kalibrierung included sein.

JOYCAPS joyCaps;

JOYINFOEX joyInfoEx;

ZeroMemory(joyInfoEx, sizeof(joyInfoEx);

joyGetDevCaps(JOYSTICKID1, &joyCaps, sizeof(joyCaps));

BOOL JoyHasThrottle = (joyCaps.wCaps & JOYCAPS_HASZ);

if (JoyHasThrottle){ joyInfoEx.dwSize = sizeo(joyInfoEx);

joyInfoEx.dwFlags=JOY_RETURNZ;

joyGetPosEx(JOYSTICKID1, &joyInfoEx);}

joyInfoEx.dwZpos übergibt nun die Joy-Position. Die relative Position wird berechnet aus joyCaps.wZmin und joyCaps.wZmax

Man kann JOY_RETURNZ mit anderen Flags "or-en" (Position, Button-states, usw.) in einem einzigen Aufruf bekommt man alle Ergebnisse auf EINMAL!

Es ist nicht nur möglich X,Y und Z abfragen, sondern auch noch R für Ruder (Paddle), U und V (für Fußpedalen, drehbare Joysticks (Griff drehbar nach links und rechts), frei definierte Sliders, Knöpfe und was die Hardware-Produzenten den Pads und Joysticks so mitgegeben haben). Nicht aber den POV. Die Position des Helms wird über JOYINFOEX.dwPOV abgefragt. (Aber ehrlich: Wer hat denn schon so einen blödsinnigen Helm?)

Irgendwie habe ich zwar noch das Gefühl, als ob die Zeitinformationen bei den Polls fehlen, aber die sind bestimmt in der JOYINFOEX.sonstwas versteckt oder halt in irgendeiner Get()-Routine abfragbar. Wie gesagt, habe ich halt das SDK noch nicht installiert und mich mit DirectInput noch gar nicht beschäftigt (ist in meiner Literatur auch nirgendwo brauchbar behandelt).

Hoffentlich bringt´s Dir was.

<FONT COLOR="#a62a2a" SIZE="1">[ 12. Oktober 2001 16:42: Beitrag 2 mal editiert, zuletzt von Crush ]</font>

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...