Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 10.02.2005, 11:18 Titel: Gamepad abfragen |
|
|
Hi,
weiß jemand ob ein Gamepad wie ein Joystick abgefragt wird oder ob es anderst behandelt werden muss?
Theoretisch müsste es ja wie bei einem Joystick funktionieren, nur das es halt viele Buttons und keine Axen gibt.
Hat sich schon jemand damit beschäftigt?
MfG Chriss |
|
Nach oben |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 10.02.2005, 11:20 Titel: |
|
|
Schau mal in der Doku nach und in der dinput.h. Da steht alles, du kannst auch japanische Keyboards abfragen  _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 10.02.2005, 15:21 Titel: |
|
|
tjo, es gibt halt bei DInput die Joystickstruktur, die man zum Abfragenn braacuth, und diebietet wircklich reichlich Platzt für alles mögliche. Ich glaube auch, das auch Gamepads Achsen haben, die haben dann halt nur immer Vollausschlag.
Lenkräder werden glaub ich auch genauso behandelt. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 10.02.2005, 17:58 Titel: |
|
|
Aber das stimmt, man kann Lenkräder und Gamepads genauso wie Joysticks abfragen. Beim Lenkrad ist die X-Achse dann das Rad und die Y-Achse sind die Pedalen.
Ein Gamepad mit so einem kleinen Steuerknüppel oder auch zweien davon hat dann halt 2 X-Achsen (linker, rechter Knüppel) und 2 Y-Achsen (linker und rechter Knüppel) Also wie zwei Joysticks.
Ein Gamepad mit so einem Steuerkreuz ist ja auch wie ein Joystick nur mit abgesägtem Griff und dass er immer Vollausschlag macht. Von der Behandlung her ist er jedoch genau wie ein klassischer Joystick. |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 10.02.2005, 18:01 Titel: |
|
|
jo, am besten macht man das vileiecht so, das man jedes EReigniss des Joysticks/GAmepads/Lenkrades in ienem einfachen Fenster anzeigen kässt (kann man ja bei DInput erhalten). Dann sieht man hatl am besten, wann man was bekommt. (Oder dirket fürs Spile machen, das man die Steuerung einstellen kann.) _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 10.02.2005, 20:35 Titel: |
|
|
Ich hab das jetzt hinbekommen.
Man frägt es wirklich wie ein Joystick ab und man könnte das Beispiel aus dem Buch 1:1 übernehmen wobei sich gerade bei Digitalpads eine Struktur mit boolschen Werten empfiehlt.
Ich habe nur noch ein Problem damit 2 verschiedene Gamepads abzufragen.
Weiß jemand zufällig welche Objekte ich doppelt anlegen muss?
Ich habe jetzt ein sysKeyboard, eine sysMouse (oder so) und 2 entsprechende Objekte für ein Joystick.
Wenn es jemand weiß bitte posten wenn nicht werd ich es schon irgend wann herausbekommen und hier für die Posten die es auch mal brauchen könnten.
Danke für eure Beträge! |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 11.02.2005, 10:31 Titel: |
|
|
also du kannst mit
Code: |
IDirectInput8::EnumDevices(...);
|
Alle eingabe Geräte abfragen. In den Flags kannst du einstellen, welche alle aufgelistet werden sollen, also zum Beispiel alle Joysticks (oder alle Mäuse oder ale Tastaturen *g*).
Dann glabu ich für jedes Gerät, welches du benutzen willst einmal CreateDevice aufrufen.
Mit dem Deivece kann man per
Code: |
IDirectInputDevice8::EnumObjects(...)
|
noch nachschauen, wie viel eKnöpfe Achsen und sonstigen Kram das Gerät hat.
nfos zu den funktionen, sollten in der Dokumentation stehen. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 11.02.2005, 12:52 Titel: |
|
|
So ich hab's jetzt.
Man kann den Code aus dem Buch gut als Grundlage nehmen.
Mann braucht eigenltich alles doppelt, auch 2 Callbackfunktionen.
Allerdings muss man in den Callbackfunktionen die nicht als letztes ausgeführt werden einen anderen Wert zurückgeben.
statt "DIENUM_STOP" muss "DIENUM_CONTINUE" zurückgegeben werden, sonst werden die nachfolgenden Callbackfunktionen ignoriert. Bei der letzten Callbackfunktion muss aber wieder "DIENUM_STOP" zurückgegeben werden sonst funktioniert die Abfrage nicht richtig. |
|
Nach oben |
|
 |
RayJunx JLI'ler
Alter: 44 Anmeldedatum: 16.01.2006 Beiträge: 130 Wohnort: Bayern Medaillen: Keine
|
Verfasst am: 03.09.2006, 19:33 Titel: |
|
|
hi chriss,
ich habe genau das gleiche problem mit der einbindung einer gamepad steuerung die du schon gelöst hast. Ich habe auch den code aus dem buch übernommen und konnte so den rechten stick auf meinem "XBOX360 for PC controller" ablesen X und Y achse. aber ich komme nicht an die achswerte des rechten joystick dieses einen controlers ran. Kannst du mir weiterhelfen? Ist leider sehr eillig. hoffe du siehst diese pin bald.
hier der quellcode den ich zur einbindung verwendet habe:
Code: | // Joystick-Bereich bestimmen
DIPROPRANGE JoystickRange;
ZeroMemory(&JoystickRange,sizeof(JoystickRange));
JoystickRange.diph.dwSize = sizeof(JoystickRange);
JoystickRange.diph.dwHeaderSize = sizeof(DIPROPHEADER);
// Setzen der Werte für die X-Achse
JoystickRange.diph.dwObj = DIJOFS_X;
JoystickRange.diph.dwHow = DIPH_BYOFFSET;
JoystickRange.lMin = -1000;
JoystickRange.lMax = 1000;
// DIPROP_RANGE - Bereich der Achsen
if(FAILED(lpDIJoystick->SetProperty(DIPROP_RANGE, &JoystickRange.diph)))
{
MessageBox(hWnd,"Fehler beim Setzen der Joystickeigenschaften (X-Achse)","Fehler",MB_OK);
return FALSE;
}
// Setzen der Werte für die Y-Achse (gleiche Werte wie für X)
JoystickRange.diph.dwObj = DIJOFS_Y;
if(FAILED(lpDIJoystick->SetProperty(DIPROP_RANGE, &JoystickRange.diph)))
{
MessageBox(hWnd,"Fehler beim Setzen der Joystickeigenschaften (Y-Achse)","Fehler",MB_OK);
return FALSE;
}
// Zugang zum Joystick verschaffen
lpDIJoystick->Acquire();
|
_________________ Just a Freak |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 03.09.2006, 19:59 Titel: |
|
|
Wenn du mit dem XBox 360 Controller arbeiten willst, dann schau dir lieber XInput an - das ist neu in DX und speziell für den Controller angepasst. |
|
Nach oben |
|
 |
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 04.09.2006, 10:53 Titel: |
|
|
Hi RayJunx,
also erstmal muss ich sagen das ich damit noch nie gearbeitet habe weil ich nur Gamepads besitze die ein Steuerkreutz und 10 Buttons haben.
Für das XBox360 Gamepad wäre ja eigentlich XInput wirklich das Beste. Falls du aber auch andere Gamepads mit mehreren Joysticks usw. nutzen willst bringt XInut nicht viel.
Ich hab mal in der DX Doku nachgeshen und folgendes gefunden:
DIJOFS_X
DIJOFS_Y
DIJOFS_Z
DIJOFS_Rx
DIJOFS_Ry
DIJOFS_Rz
DIJOFS_BUTTON0 to DIJOFS_BUTTON31 or DIJOFS_BUTTON(n)
DIJOFS_POV(n)
DIJOFS_SLIDER(n)
Da du den Hauptjoystick mit DIJOFS_X und DIJOFS_Y abfragen kannst vermute ich, dass das Digitale Steuerkreutz mit DIJOFS_Rx und DIJOFS_Ry und der andere Joystick aus der Kombination der beiden Schubregler DIJOFS_Z und DIJOFS_Rz abgefragt wird. Es kann natürlich auch anderst herum sein
Sollte es nicht klappen kannst du noch Pov und Slider versuchen.
Ich gehe davon aus, dass du es damit hinbekommst und poste bitte deine Lösung wen es klappt.
Grüße |
|
Nach oben |
|
 |
RayJunx JLI'ler
Alter: 44 Anmeldedatum: 16.01.2006 Beiträge: 130 Wohnort: Bayern Medaillen: Keine
|
Verfasst am: 01.10.2006, 12:03 Titel: sorry |
|
|
sorry war etwas im Stress deshalb die späte antwort,
das problem war relativ einfach zu beheben, wenn irgend jemand mal das selbe Problem haben solte, dann einfach mir mailen. maridian@gmx.de das geht am schnellsten, und ich kram euch nen funktionierenden code zusammen. war im prinzip wie mein ansatz oben. Kein großer akt, ist aber eine schnelle lösung, gibt sicher formtechnisch schönere
grüße an alle, und danke nochmal,
RayJunx _________________ Just a Freak |
|
Nach oben |
|
 |
|