Programación Específica > DirectX

 Problemas Con Direct Input

(1/1)

ifmaster:
Hola, tengo problemas usando un "control pad" con direct Input, me crea los devices bien, pero a la hora de actualizar la aplicación peta xD.
Os dejo la clase que gestiona Direct Input y un archivo .h de utlierias.
La clase es un signelton, habria que usarla asi:

En el WinMain:

C_DIManager::getMe()->init(hWnd, hInst, false (bool exclusive_mode);

y el bucle de la aplicación hay que actualizarlo para ver el estado del game pad, es aqui donde me peta y no se porque.

C_DIManager::getMe()->update();

Por cierto, esta clase todavia lo estoy haciendo, de momento solo gestional el control pad, ahunque mas adelante le tengo que implementar el teclado tambien, pero todavia no esta.

Espero me puedan ayudar pues llevo mucho tiempo con esto y no tengo ni idea de porque me ocurre.
Un saludo y muchas gracias de antemano.

JuanK:
No he usado la vesion coritiana de direct 3D, pero si la managed,
creo que el problema es que estas perdiendo el manejador del joyStick asi que antes de actualizar el estado del dispositivo deberias asugurarte que aun tienes el handle.

Aqui te coloco un segmento d codigo de directX managed con C· puede servirte de algo.


--- Código: Text ---#region Joystick      /// <summary>      /// Obtiene el estado del joystick      /// </summary>      /// <param name="estEntr">Estructura donde se retornara la entrada del joystick</param>      private void GetEntradaJoyStick(ref StEstadoEntrada estEntr)      {        //Si se detecto joystick y ademas no esta bloqueado        if(!bloqueoEntrada.joystick && entradaActiva.joystick)        {          #region obtener el estado del dispositivo          try          {            /* Para algunos dispositivos es necesario efectuar polling con el fin            * de que se refresque el estado actual de los datos recibidos            * desde el dispositivo, en caso de que el dispositivo no lo necesite            * este llamado no causa ningun efecto*/            disJoystick.Poll();          }          catch(NullReferenceException){}          catch(InputException ex)          {            //Se intenta recapturar el dispositivo            if (ex is NotAcquiredException)            {              try              {                if ( disJoystick != null )                {                  disJoystick.SetCooperativeLevel( propietario, CooperativeLevelFlags.Exclusive | CooperativeLevelFlags.Foreground);                  disJoystick.SetDataFormat(DeviceDataFormat.Joystick);                }                disJoystick.Acquire();              }              catch(Exception ex2)              {                                if (  ex2 is OtherApplicationHasPriorityException )                {                  Console.WriteLine("Error desconocido, no se ha reconocido el JoyStick"+ex2.ToString());                }              }            }            else            {              if ( disJoystick != null )              {                try                {                  disJoystick.SetCooperativeLevel( propietario, CooperativeLevelFlags.Exclusive | CooperativeLevelFlags.Foreground);                  disJoystick.SetDataFormat(DeviceDataFormat.Joystick);                  disJoystick.Acquire();                }                catch(ObjectDisposedException)                {                  entradaActiva.joystick = false;                }                catch{}              }            }          }          #endregion 

Navegación

[0] Índice de Mensajes

Ir a la versión completa