• Lunes 29 de Abril de 2024, 07:38

Autor Tema:  Problemas Con Direct Input  (Leído 2451 veces)

ifmaster

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Problemas Con Direct Input
« en: Sábado 1 de Abril de 2006, 14:51 »
0
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.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problemas Con Direct Input
« Respuesta #1 en: Domingo 23 de Abril de 2006, 17:23 »
0
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.  
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io