Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemas con los gatillos del gamepad de XBox360 en DirectInput

Iniciado por [EX3], 04 de Febrero de 2010, 12:17:39 PM

« anterior - próximo »

[EX3]

Wenas, gente.

Vengo a ver si alguien se le ocurre una idea para solventar un problema comun que tengo con los gamepad de XBox360. Resulta que estoy implementado el soporte de gamepads para mi desarrollo en base a lo que ofrece dx_lib32 en input y ampliando capacidades para el soporte del segundo eje y el forcefeedback y hasta el momento ha ido todo como la seda, he logrado bajo una misma interfaz poder trabajar via dx_lib32 y DirectInput con cualquier gamepad ya sea uno corriente del Carrefour o el propio de Xbox360, todo de forma transparente para el usuario. El problema lo tengo al tratar de leer los gatillos del gamepad de Xbox360. DirectInput, por diseño de hardware (o eso reza Microsoft :P), lo interpreta como un unico eje, el Z. Si necesito interpretar cada gatillo por separado la solucion es bien facil, el problema se presenta al presionar ambos gatillos, lo que provoca que el eje se centre y parezca que no se ha presionado ningun gatillo.

La solucion para los entendidos oviamente pasa por usar, como es logico, la API de XInput para interpretar los gamepad de Xbox360. De hecho lo estoy usando para poder utilizar los motores de vibracion y aplicar el forcefeedback de igual manera que hago con el resto de gamepads (utilizo un port a VB6 de este wrapper de XInput en C#). Sin embargo, no se exactamente por que, al leer los estados del gamepad todos los valores me bailan interfiriendose unos con otros (por ejemplo, al leer los gatillos devuelve valores aleatorios y que se ven afectados por el stick izquierdo entre otros). Los botones y los dos ejes me dan igual por que dx_lib32 y DirectInput los interpretan perfectamente (y asi me ahorro codigo por otro lado). De seguro el problema lo tengo con la definicion de estructura que le paso a XInput para leer los estados o bien algun problema concreto de VB6 para leer correctamente los bytes (no seria la primera vez que alguna API de Windows con estructura de datos no funciona correctamente con VB6).

Despues de todo este rollo la pregunta es bien sencilla (y ya podria ser igual la solucion je :P). Alguien se le ocurre alguna idea rebuscada para lograr interpretar en base a un mismo eje las posiciones de ambos gatillos? Si no encuentro solucion por esta via me va a tocar hacer la chapuza de compilar el wrapper original de C# de forma que muestre interfaz COM para conectarlo con VB6 y agregar .NET 1.1 como dependencia al proyecto, pero es algo que me gustaria evitar  :(

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

[EX3]

Solucionado de la forma que menos esperaba.

Siguiendo con la busqueda me tope con una libreria que es un wrapper de Xinput para Game Maker (GMXinput.dll - http://gmc.yoyogames.com/lofiversion/index.php/t360286.html) y salvo por que usa la convencion de llamadas __cdecl y no la __stdcall (la primera no le gusta a VB6.0 y eso me ha obligado a instalarme el VC++ 2008 Express y realizar ese cambio, nada del otro mundo pero todavia me escuecen los dedos por tocar C++ :P) la cosa va de lujo ya que obtengo finalmente cada gatillo por separado, asi que asunto arreglado :)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.