Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Como capturar correctamente los "clicks" del raton

Iniciado por capitan_kirk, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

capitan_kirk

                                Hola , estoy haciendo una aplicación directx , pero tengo un problemilla. Capturo el raton con directinput pero cuando quiero saber si se ha pulsado un botón del ratón, a veces el resultado es como si se hubiera hecho doble click.

Me explico , tengo una clase boton en la cual al captar del raton un click encima del objeto este cambia de color , pero a veces va tan "sensible" que hago un click pero me lo coge como dos clicks seguidos.¿ Hay algun modo de ajustar la sensibilidad?

Gracias a quien pueda responder a este pobre trekkie.                                

Lord Trancos

                                Si no recuerdo mal, DirectInput no te informa de si se ha hecho click o no. Solo te informa sobre si un boton del ratón ha sido pulsado o ha sido soltado. Por lo que es posible que tu problema sea que pillas los dos eventos (pulsar y soltar) como si fueran dos clics.
                               
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

capitan_kirk

                                en realidad creo que solo capturo el evento de pulsar , lo hago así:

left = mousestate.rgbButtons[0] & 0x80;

pero ya te digo , a veces me devuelve dos pulsaciones , es como si fuera que lo hace demasiado rápido. nose , alguien más tiene ideas?                                

Drácula

                                Quizás el problema esté en tu ratón o en el driver de DirectInput
                               
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

jpastor

                                Hola kirk,

Lo que puedes hacer es actualizar el contenido de mousestate cada cierto tiempo en vez de cada frame (1/10 sec podría estar bien, aunque eso te limita también la obtención de datos de los ejes).

Me inclino a pensar en que puede ser un problema del físico del ratón, que tenga algún botón medio changao o el cable pelao.                                

Lord Trancos

                                de donde sacas mousestate ? que tipo de variable es ?
                               
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

capitan_kirk

                                las variables que uso son:
LPDIRECTINPUT8 mouse;   
LPDIRECTINPUTDEVICE8 m_device;
DIMOUSESTATE mousestate;

y el codigo para capturar los clicks y la posicion del ratón es el siguiente:

m_device->GetDeviceState(sizeof(DIMOUSESTATE),&mousestate);

x = x + mousestate.lX;
y = y + mousestate.lY;

left = mousestate.rgbButtons[0] & 0x80;
right = mousestate.rgbButtons[1] & 0x80;

he probado en distintos ordenadores y siempre pasa igual , o me detecta como dos clicks o a veces ninguno o a veces uno.
si alguien tiene una función de captura del ratón más aceptable que esta pues nada , se lo agradeceré enormemente.
                               

Lord Trancos

                                Prueba a usar el metodo GetDeviceData. (El ejemplo sobre el mouse de DirectInput creo que lo usa, asi que puedes probar ese ejemplo).
                               
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

mICrO

                                Sino recuerdo mal con este metodo lo que obtienes es si el boton esta pulsado, no si has echo click, o no.

El problema varia segun como funcione el driver, o sea, si pulsas el raton, durante bastante tiempo, veras que durante n game-loops esta pulsado el boton, por lo cual dependiendo de si un click tarda mas o menos, o como el driver lo envia, te podria suponer varios clicks, en tu sistema.

Para hacerlo mejor deberias usar switch para indicar si el boton estaba pulsado anteriormente o si esta soltado, y solo registrar un nuevo click cuando se pulsa.

mas o menos

bool estadoEstabaPulsado = false;

...
...
bool bEstaPulsado = stado&0x80;
bool click = false;

if (bEstaPulsado){

 if (!estadoEstabaPulsado) click = true;
 estadoEstabaPulsado = true;  

}else{

 estadoEstabaPulsado = false;
}
if (click){
x++;
y++;
}

Mas o menos algo por el estilo

mICrO
Citar
El 2002-05-24 10:29, capitan_kirk escribió:
Hola , estoy haciendo una aplicación directx , pero tengo un problemilla. Capturo el raton con directinput pero cuando quiero saber si se ha pulsado un botón del ratón, a veces el resultado es como si se hubiera hecho doble click.  

Me explico , tengo una clase boton en la cual al captar del raton un click encima del objeto este cambia de color , pero a veces va tan "sensible" que hago un click pero me lo coge como dos clicks seguidos.¿ Hay algun modo de ajustar la sensibilidad?

Gracias a quien pueda responder a este pobre trekkie.
ICrO : log off






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.