AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Problem mit DirectInput und ForceFeedback
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit DirectInput und ForceFeedback

Offene Frage von "TOC"
Ein Thema von TOC · begonnen am 24. Apr 2011
Antwort Antwort
Benutzerbild von TOC
TOC

Registriert seit: 5. Jan 2005
Ort: Trier
248 Beiträge
 
Delphi 7 Personal
 
#1

Problem mit DirectInput und ForceFeedback

  Alt 24. Apr 2011, 11:58
Hallo!

Habe zu Ostern ein GamePad von SpeedLink geschenkt bekommen. Jetzt versuche ich mit DirectInput ein Programm zu schreiben mit dem ich dieses GamePad abfragen kann. Ich verwende Delphi 7 Pe und die DirectX9-Header von Clootie (http://www.clootie.ru/delphi/download_dx92.html).

Knöpfe und Achsen sowie Mehrwegschalter kann ich inzwischen abfragen. Aber ich habe große Probleme mit den ForceFeedback-Effekten. Also, das GamePad hat zwei eingebaute Vibrations-Motoren. Der Linke dreht sich etwas langsamer und hat eine größere Masse als der Rechte. Es gelinkt mir aber immer nur den linken Motor einzuschalten, der rechte reagiert einfach nicht. Auch gelinkt es mir nicht beide Motoren gleichzeitig laufen zu lassen.

Hier etwas Code:

Delphi-Quellcode:
procedure TForm1.ConstButton1Click(Sender: TObject);
Const
  Axes: Array[0..1] of LongWord = (DIJOFS_X, DIJOFS_Y);
  Direction: Array[0..1] of LongInt = (0, 0);
Var
  Effect: DIEFFECT;
  ConstantForce: DICONSTANTFORCE;
  HR: HResult;
begin
  // Alle alten Effekte freigeben
  FreeEffects;

  ConstantForce.lMagnitude:=DI_FFNOMINALMAX;;

  FillChar(Effect, SizeOf(Effect), 0);
  Effect.dwSize:=SizeOf(DIEFFECT);
  Effect.dwFlags:=DIEFF_CARTESIAN or DIEFF_OBJECTOFFSETS;
  Effect.dwDuration:=cEffectSeconds; // 4 Seconds
  Effect.dwSamplePeriod:=0;
  Effect.dwGain:=DI_FFNOMINALMAX;
  Effect.dwTriggerButton:=DIEB_NOTRIGGER;
  Effect.dwTriggerRepeatInterval:=0;
  Effect.cAxes:=1;
  Effect.rgdwAxes:=@Axes[0];
  Effect.rglDirection:=@Direction;
  Effect.lpEnvelope:=Nil;
  Effect.cbTypeSpecificParams:=SizeOf(DICONSTANTFORCE);
  Effect.lpvTypeSpecificParams:=@ConstantForce;
  Effect.dwStartDelay:=0;

  // Hier wird ein Effekt für die X-Achse erzeugt (funktioniert)
  // X-Axis
  HR:=PIController.CreateEffect(GUID_ConstantForce,
                                @Effect,
                                PIEffects[0],
                                Nil);
  If Failed(HR)
  Then ErrorBox(HR, 'ConstButton1Click', 'The effect 0 could not be created!');

  // Hier wird ein Effekt für die Y-Achse erzeugt (funktioniert NICHT :x)
  // Y-Axis
  Effect.rgdwAxes:=@Axes[1];
  HR:=PIController.CreateEffect(GUID_ConstantForce,
                                @Effect,
                                PIEffects[2],
                                Nil);
  If Failed(HR)
  Then ErrorBox(HR, 'ConstButton1Click', 'The effect 2 could not be created!');


  // Hier wird ein Effekt für beide Achsen erzeugt (Aber nur der linke Motor reagiert :evil:)
  // X- and Y-Axes
  Effect.cAxes:=2;
  Effect.rgdwAxes:=@Axes;
  Effect.dwFlags:=DIEFF_POLAR or DIEFF_OBJECTOFFSETS;
  HR:=PIController.CreateEffect(GUID_ConstantForce,
                                @Effect,
                                PIEffects[1],
                                Nil);
  If Failed(HR)
  Then ErrorBox(HR, 'ConstButton1Click', 'The effect 1 could not be created!');
end;
Also, wenn ich diese Procedure aufrufe werden alle 3 Effekte ohne Fehlermeldung erzeugt.
Auch kann ich alle drei Effekte ohne Fehlermeldung starten, aber was auch immer ich versuche es reagiert stets nur der linke Motor?!?!
Es spielt scheinbar auch keine Rolle was ich im Array Direction für Werte angebe- das GamePad scheint dies einfach zu ignorieren.

Ich dachte dass ich über das Array Axes festlegen kann welcher Motor angesprochen wird.

Ich bin für jeden Tipp Dankbar denn ich weiß im Moment wirklich nicht wo der Fehler liegen könnte.

Übrigens: Wenn ich in der Systemsteuerung auf GamePad gehe dort gibt es eine Seite "Vibration Page". Dort kann ich BEIDE Motoren unabhängig voneinander und auch gleichzeitig laufen lassen- es muss also irgendwie funktionieren.

Grüße von TOC!

Im Anhang ein Zip mit dem gesamten Programm zur Abfrage des GamePad (Source und Exe).
Angehängte Dateien
Dateityp: zip DirectInput 0.0.6.zip (245,1 KB, 9x aufgerufen)
Lars Uwe Hohmann
"Wäre die Erde eine Bank, ihr hättet sie längst gerettet!"
(Zitat GreenPeace)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz