Tak už jsem to rozvibroval pomocí kódu převedeného z C# a to takto: Před řádek
joyDevice.Acquire()
jsem přidal toto
joyDevice.SetDataFormat(DeviceDataFormat.Joystick)
joyDevice.SetCooperativeLevel(Me, CooperativeLevelFlags.Exclusive + CooperativeLevelFlags.Background)
joyDevice.Properties.AxisModeAbsolute = True
joyDevice.Properties.AutoCenter = False
dále funkce
Public Shared Function InitializeForce(ByVal Dev As Device, ByVal Type As EffectType, ByVal Axis As Integer(), ByVal Magnitude As Integer, ByVal Flags As EffectFlags, ByVal Duration As Integer) As EffectObject
Dim eo As EffectObject = Nothing
Dim e As Effect
For Each ei As EffectInformation In Dev.GetEffects(EffectType.All)
Debug.Print(ei.Name)
If DInputHelper.GetTypeCode(ei.EffectType) = CInt(Type) Then
e = New Effect()
e.SetDirection(New Integer(Axis.Length - 1) {})
e.SetAxes(New Integer(0) {})
e.EffectType = Type
e.ConditionStruct = New Condition(Axis.Length - 1) {}
e.Duration = Duration
e.Gain = 10000
e.Constant = New ConstantForce()
e.Constant.Magnitude = Magnitude
e.SamplePeriod = 0
e.TriggerButton = CInt(Microsoft.DirectX.DirectInput.Button.NoTrigger)
e.TriggerRepeatInterval = CInt(DI.Infinite)
e.Flags = Flags
e.UsesEnvelope = False
' Create the effect, using the passed in guid.
eo = New EffectObject(ei.EffectGuid, e, Dev)
End If
Next
Return eo
End Function
kterou volám takto
Dim EO As EffectObject = InitializeForce(joyDevice, EffectType.ConstantForce, axis, 10000, EffectFlags.ObjectOffsets Or EffectFlags.Spherical, 2000000)
EO.Start(1)
GamePad sice zavibruje ale né tak jak bych potřeboval. Ve volání té funkce je poslední paramatr doba trvání v microsekundách a i když tam dám hodnotu třeba 10000000 tedy mělo by to být 10s tak po spuštění vibrace si gamepad zavibruje jak chce treba 2s nebo 4s apod. A navíc mi jedou oba motorky, ale já bych chtěl abych mohl spouštět každý zvlášť. Dokáže mi někdo poradit jak to upravit abych mohl pouštět každý motor zvlášť na dobu jasně stanovenou? Předem moc díky
|