Autor Tema: DirectX Input para Visual Basic  (Leído 4753 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
DirectX Input para Visual Basic
« en: 13 de Diciembre de 2007, 15:33:52 »
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.

Código: [Seleccionar]
Imports System
Imports System.IO.Ports

Luego iniciaremos el dispositivo al crear el Form

Código: [Seleccionar]
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.

Código: [Seleccionar]
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.

Código: [Seleccionar]
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.
« Última modificación: 13 de Diciembre de 2007, 15:37:41 por c4_esp_VR »

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: DirectX Input para Visual Basic
« Respuesta #1 en: 14 de Diciembre de 2007, 17:14:13 »
se ve interesante lo del directX.

gracias por el aporte c4_esp_VR



PD: he leido por allí que existe otro,creo que se llama opengl.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: DirectX Input para Visual Basic
« Respuesta #2 en: 14 de Diciembre de 2007, 18:01:05 »
OpenGL es una librería abierta para hacer gráficos 3D, es usado en juegos como el famoso Unreal o Quake, que yo sepa a día de hoy y sería una gran sorpresa que opengl tuviese sus propias librerías para el manejo de joystick o game pad. OpenGL permite hacer muchas virguerías gráficas de forma mucho más sencilla que las directx además de un buen manejo de camáras y luces.

Por el otro lado DirectX SDK trae un paquete completo para manejar sonido, redes, teclado, ratón, joystick, gráficos, etc...Pero flojea en la dificultad de hacer un motor gráfico.

Por cierto si estais muy interesados en dichos temas no teneis más que preguntarme e intentaré responder vuestras dudas ya que he trabajado tanto con DirectX como con OpenGL pero este último sólo en VC++.

Un saludete.

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: DirectX Input para Visual Basic
« Respuesta #3 en: 15 de Diciembre de 2007, 14:27:22 »
en casa tengo una revista donde hacen una ligera mención al directx hecho con el devc++ y al ver el código fuente para hacer una ventana con un cubo rotando, es bastante largo  :2]

y en vb ¿que hay en cuanto al tema de la velocidad de ejecución?

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: DirectX Input para Visual Basic
« Respuesta #4 en: 18 de Diciembre de 2007, 08:54:58 »
La verdad es que como bien dices hacer alguna chorradilla con las directDraw es bastante complejo al menos en c++, en vb la cosa es bastante más sencilla sólo que no hay librerías actualizadas para vb sobre dx.

A esto hay que añadirle la velocidad de ejecución como bien dices, si hay que tirar muchiiiiisimas lineas de código para hacerlo en c++ imagina las lineas de código que tiene que tener en vb ya que este cargará montones de librerías adicionales para poder ejecutarlo en vb.

Respecto a las directx input el tema de velocidad va bastante bien ya que he logrado actualizar la adquisición de datos del joystick con un temporizador cada 50ms  :mrgreen: :mrgreen: :mrgreen:

Con lo que imagino que si en vez de utilizar el temporizador por defecto de vb usasemos uno implementado por nosotros habriendo una taréa multihilo o miltiproceso iría mucho mejor.

Un saludete.

Desconectado alanitotkd

  • PIC10
  • *
  • Mensajes: 20
Re: DirectX Input para Visual Basic
« Respuesta #5 en: 25 de Septiembre de 2011, 17:34:01 »
Hola a todos... no entiendo muy bien eso del directx input  la verdad quisiera saber donde encontrar esa libreria DInputModule.vb para empezar a probar el ejemplo que nos has proporcionado ...



saludos