Es gibt keinen standardisierten Weg.
Unterschiedliche Geräte haben unterschiedliche Rumpelfunktionen und -beschränkungen.
Die überwiegende Mehrheit der Geräte unterstützt kein "Force Feedback" (z. B. ein Lenkrad, das es dem Programmierer ermöglicht, auf einen bestimmten Winkel zurückzudrücken, wenn er auf einen Bordstein oder ein Schlagloch trifft), sondern rumpelt nur in eine unkontrollierte / willkürliche Richtung.
Die meisten der Force Feedback-Funktionen, die in MSDN / DirectX und anderen APIs erwähnt werden, haben sich in der Praxis noch nie auf dem Benutzermarkt bewährt oder sind nur schlecht und / oder nicht portabel in der Lage, die "intelligenten" Steuerelemente (Envelope, Repeat usw.) zu implementieren Um so unbrauchbar zu sein, dass Entwickler in der Praxis häufig gezwungen sind, die ON / OFF-Regler direkt mit ihrer eigenen Effektimplementierung zu verwenden.
Fortgeschrittenere Geräte, die servogesteuertes Force-Feedback ermöglichen, benötigen benutzerdefinierte APIs, da generische Eingabe-APIs die erforderlichen Parameter (exakte Winkel, exakte Kräfte, Grenzen usw.) nicht unterstützen.
Durch das Hinzufügen neuer Technologien wie VR-Feeling-Handschuhen zum Mix fehlen diese generischen APIs noch mehr.
Die gebräuchlichste Implementierung sind zwei Gleichstrommotoren mit jeweils einer unsymmetrischen Last, wobei einer schwerer als der andere gewichtet ist und keine präzise Drehzahlregelung erfolgt.
Zumindest haben Sie die Kontrolle über das Ein- und Ausschalten und können eine begrenzte PWM ausführen Leistungskontrolle, aber keine exakte Geschwindigkeitskontrolle durchführen. Sie wissen nicht, wie hoch die Geschwindigkeit und die resultierende Vibration tatsächlich sein werden. Verschiedene Steuerungen haben unterschiedliche Motoren und Gewichte, die bei gleicher Einstellung mit unterschiedlichen Drehzahlen laufen.
Die Motoren müssen zuerst hochlaufen und benötigen für einige Zeit die volle Leistung, dann kann die PWM auf eine niedrigere Einstellung eingestellt werden. Die Anlaufverzögerung schränkt die Reaktionsfähigkeit stark ein.
Die Controller werden häufig einmal pro Frame aktualisiert, sodass Sie eine Aktualisierungsfrequenz von etwa 20 Hz bis 100 Hz erhalten. Dies begrenzt die Auflösung Ihrer PWM-Steuerung, da Sie nicht möchten, dass die Motoren bei der niedrigsten Einstellung blockieren. Und Sie wissen nicht, wie niedrig die Motoren der Endbenutzersteuerung sein können, bevor sie anhalten, sodass Sie eine gute Sicherheitsmarge benötigen.
Einige Systemanforderungen schränken Ihre Möglichkeiten weiter ein.
Mobile Geräte haben normalerweise nur 1 Vibrationsmotor und PWM ist möglicherweise aufgrund der geringen Trägheit aufgrund des Gewichts und der langsamen Aktualisierungsrate nicht möglich. Das System filtert es möglicherweise weiter, um Missbrauch oder sogar Beschädigung (Grenzwerte für Leistungstransistoren und Induktionsspitzen) oder nur ein wirklich langsames GPIO-Subsystem zu verhindern.
Auf Mobilgeräten sind Sie möglicherweise eingeschränkt oder möchten sich darauf beschränken, ohne PWM für ungefähr X * 50 Millisekunden zu vibrieren.
Einige neuere Geräte und Controller verfügen über ein Solenoid, das wie ein Lautsprecher von einer Audiowelle mit niedriger Abtastrate angetrieben wird. Diese bieten Ihnen mehr Kontrolle, unterscheiden sich jedoch grundlegend von den gängigen Controllern.
Wegen all dieser Unterschiede sollten Sie abstrakte das Schwingungssystem eine begrenzte Anzahl von High-Level - Makro-Effekte namentlich in einem Shoot-and-Forget - Mode spielen: PlayVibration(player, "Got Loot");
, PlayVibration(player, "Heavy Fall");
, StopAllVibrationFor(player);
, ...
Dann müssen Sie schwache Vibrationseffekte und Vibrationskontrollcodes erstellen, die für jede Plattform individuell angepasst sind .
Selbst bei einem Musikspiel PlayVibration
ist es einfacher , One-Shot für jeden Schlag zu verwenden und zu steuern, wenn das Spiel pausiert wird und Probleme bei der Neusynchronisierung eines regelmässigen Effektgenerators auftreten.
Während Geräte mit einem tatsächlichen elektromagnetischen Rumpeln wie ein Audiogerät behandelt werden können und Audio-APIs aufgrund von Batterieproblemen verwenden, kann dies den Vorschriften des Systems zuwiderlaufen, wenn das Magnetventil ständig mit Strom versorgt / aktiv ist . "Leistungsstufe 0" stimmt möglicherweise nicht mit "Magnet aus" überein, daher ist auch dann besondere Vorsicht geboten.