Como siempre intento hacer, aportaré todos los conocimientos posibles a los grandes foreros de todopic.
Aqui os dejo un mega tutorial sobre programación de DirectXInput en VisualBasic, para mi opinión es muy sencillo de realizar y comprender teniendo nociones básicas de VB, sólo espero que os sea de gran utilidad amigos.
Empezamos...
DirectX input para Visual Basic
Fundamentos
Visual BASIC nos ofrece la posibilidad de hacer un programa con DirectX Input de forma rápida y sencilla, para ello lo primero que tenemos que hacer es tener instalado en nuestro ordenador la librería DInputModule.vb la cual incluye las funciones necesarios para crear la instancia de un dispositivo como un Joystick o GamePad.
Lo primero que tenemos que hacer es agregar dicho elemento. Vamos a la barra de herramientas, pulsamos sobre proyecto y accedemos a agregar elemento existente, donde buscaremos y seleccionaremos el archivo DInputModule.vb. Si la agregación ha sido correcta aparecerá en nuestro explorador de soluciones abajo de nuestro proyecto el archivo. Podemos ver como quedará nuestro proyecto después de este proceso.
Ya hemos agregado nuestra librería, pero si compilamos dará errores ya que está depende de los archivos de DirectX instalados por defecto en nuestro ordenador por lo que habrá que agregar la referencia de dichos archivos a nuestro proyecto.
Para ello seleccionaremos Proyecto y a continuación Propiedades de [ Nombre del proyecto ]...
A continuación pincharemos sobre la pestaña de nuestra izquierda con nombre Referencia y pulsamos sobre el botón Agregar, apareciéndonos el siguiente diálogo.
Accedemos a la pestaña COM y luego buscamos el componente DirectX8 for Visual Basic Type Library para su siguiente selección y conformidad, pulsando el botón aceptar.
Hasta aquí ya tenemos enlazado nuestro proyecto a la librería DInputModule.vb y enlazado a la referencia de DirectX8 for Visual Basic, con lo que si compilamos ahora mismo no habrá errores de sintaxis ni de compilación.
Nos ponemos manos a la obra para realizar nuestro programa tirando sólo unas pocas líneas de código comparado con otros compiladores como Visual C++ y Delphi. Vamos a separar la programación en 2 partes fundamentales:
1.- Instanciación del dispositivo
2.- Adquisición de datos del dispositivo
1.-Instanciación del dispositivo.
Lo primero que haremos será importar una sería de librerías.
Imports System
Imports System.IO.Ports
Luego iniciaremos el dispositivo al crear el Form
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If DInput_Init() = False Then End
End Sub
DInput_Init() no sólo inicializa el dispositivo sino que busca todos los dispositivos que tengamos conectados a nuestro ordenador, para luego asignarlos a un ListBox.
2.- Adquisición de datos del dispositivo.
Crearemos un timer para hacer un "Pulling" cada 50 ms. Timer es un componente visual que se encuentra en el cuadro de herramientas dentro del submenú componentes, haremos doble click sobre él y automáticamente accedemos a la función por defecto que no es otra que la función de interrupción a la cual entraremos cada 50 ms para preguntar el estado del Joystick.
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
CheckInput()
VScrollBar1.Value = -Integer.Parse(txt_Y.Text) 'Pad analogico derecho
HScrollBar1.Value = Integer.Parse(txt_X.Text) 'Pad analogico izquierdo
VScrollBar2.Value = -Integer.Parse(txt_J.Text) 'Pad analogico derecho
HScrollBar2.Value = Integer.Parse(txt_Z.Text) 'Pad analogico izquierdo
End Sub
Si nos fijamos en la función CheckInput(), veremos que es la encargada de adquirir los datos del dispositivo y guardarlos en una variable de tipo DIJOYSTATE llamada JoystickState, la cual la asignamos a diferentes TextBox.
Form1.txt_X.Text = Int(((JoystickState.x - JOYSTICKCENTERED) - 1) / 128)
Form1.txt_Y.Text = Int(((-JoystickState.y + JOYSTICKCENTERED) + 1) / 128)
Form1.txt_J.Text = Fix(((-JoystickState.z + JOYSTICKCENTERED)) / 128)
Form1.txt_Z.Text = Fix(((JoystickState.rz - JOYSTICKCENTERED)) / 128)
Conclusión
Como podemos ver no tiene nada que ver con las complicaciones de C++ y de Delphi para conseguir programar nuestro dispositivo, pero si es limitado a la hora de realizar tareas complejas o cambiar estructuras para nuestro beneficio.
Podemos ver un resultado de lo conseguido.
Espero que os sea muy util a la hora de realizar vuestros robots móviles e incluso otras aplicaciones donde necesiteis un gamepad o joystick.
Decir también el force feed back no funcionará si no teneis instalado los drivers de vuestro dispositivo analógico.
Un saludete a todos los forores de todopic.