SoloCodigo

Programación Específica => Programación de Videojuegos => DirectX => Mensaje iniciado por: ifmaster en Sábado 1 de Abril de 2006, 14:51

Título: Problemas Con Direct Input
Publicado por: ifmaster en Sábado 1 de Abril de 2006, 14:51
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.
Título: Re: Problemas Con Direct Input
Publicado por: JuanK en Domingo 23 de Abril de 2006, 17:23
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
  1. #region Joystick
  2.       /// <summary>
  3.       /// Obtiene el estado del joystick
  4.       /// </summary>
  5.       /// <param name="estEntr">Estructura donde se retornara la entrada del joystick</param>
  6.       private void GetEntradaJoyStick(ref StEstadoEntrada estEntr)
  7.       {
  8.         //Si se detecto joystick y ademas no esta bloqueado
  9.         if(!bloqueoEntrada.joystick && entradaActiva.joystick)
  10.         {
  11.           #region obtener el estado del dispositivo
  12.           try
  13.           {
  14.             /* Para algunos dispositivos es necesario efectuar polling con el fin
  15.             * de que se refresque el estado actual de los datos recibidos
  16.             * desde el dispositivo, en caso de que el dispositivo no lo necesite
  17.             * este llamado no causa ningun efecto*/
  18.             disJoystick.Poll();
  19.           }
  20.           catch(NullReferenceException){}
  21.           catch(InputException ex)
  22.           {
  23.             //Se intenta recapturar el dispositivo
  24.             if (ex is NotAcquiredException)
  25.             {
  26.               try
  27.               {
  28.                 if ( disJoystick != null )
  29.                 {
  30.                   disJoystick.SetCooperativeLevel( propietario, CooperativeLevelFlags.Exclusive | CooperativeLevelFlags.Foreground);
  31.                   disJoystick.SetDataFormat(DeviceDataFormat.Joystick);
  32.                 }
  33.                 disJoystick.Acquire();
  34.               }
  35.               catch(Exception ex2)
  36.               {                
  37.                 if (  ex2 is OtherApplicationHasPriorityException )
  38.                 {
  39.                   Console.WriteLine("Error desconocido, no se ha reconocido el JoyStick"+ex2.ToString());
  40.                 }
  41.               }
  42.             }
  43.             else
  44.             {
  45.               if ( disJoystick != null )
  46.               {
  47.                 try
  48.                 {
  49.                   disJoystick.SetCooperativeLevel( propietario, CooperativeLevelFlags.Exclusive | CooperativeLevelFlags.Foreground);
  50.                   disJoystick.SetDataFormat(DeviceDataFormat.Joystick);
  51.                   disJoystick.Acquire();
  52.                 }
  53.                 catch(ObjectDisposedException)
  54.                 {
  55.                   entradaActiva.joystick = false;
  56.                 }
  57.                 catch{}
  58.               }
  59.             }
  60.           }
  61.           #endregion
  62.