Salve a tutti![]()
Volevo utilizzare un joystick per dare input al computer per il mio programma, e spulciando il web ho trovato le librerie DirectX, in particolare la classe DirectInput, molto utili, e in effetti lo sono (visto che sono fatte apposta). Ho scritto questo codice:
Il problema è che la funzione GetPressedButtons mi restitusice 128 byte tutti uguali a 0 sempre (in teoria dovrebbero essere tanti quanti i bottoni del joystick, cioè 8). Perchè non va?codice:Public Class Joystick Dim Devices As Microsoft.DirectX.DirectInput.DeviceList Dim dev As Microsoft.DirectX.DirectInput.DeviceInstance Dim gamepadDevice As Microsoft.DirectX.DirectInput.Device Dim JoyState As Microsoft.DirectX.DirectInput.JoystickState Sub New() Devices = Microsoft.DirectX.DirectInput.Manager.GetDevices(Microsoft.DirectX.DirectInput.DeviceClass.GameControl, Microsoft.DirectX.DirectInput.EnumDevicesFlags.AttachedOnly) Devices.Reset() Devices.MoveNext() dev = Devices.Current gamepadDevice = New Microsoft.DirectX.DirectInput.Device(dev.InstanceGuid) End Sub Public Function GetPressedButtons() As Byte() gamepadDevice.Acquire() JoyState = gamepadDevice.CurrentJoystickState Return JoyState.GetButtons End Function Public Function GetAxisValue() As Integer() Dim Values(1) As Integer gamepadDevice.Acquire() JoyState = gamepadDevice.CurrentJoystickState Values(0) = JoyState.X Values(1) = JoyState.Y Return Values End Function End Class![]()
![]()
Secondo problema: si potrebbe generare un evento quando un tasto del joystick viene premuto?
Avevo notato nella classe Device il metodo .SetNotificationEvent che richiede come parametro un System.WaitHandle. Può essere utile? Come posso fare?
Grazie a chiunque provi a rispondermi![]()
![]()
![]()

Rispondi quotando