Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Pogacha en 07 de Marzo de 2008, 01:59:29 PM

Título: Eventos del raton demorados
Publicado por: Pogacha en 07 de Marzo de 2008, 01:59:29 PM
Supongo todos habran visto este problema alguna ves.
En algunos juegos en algunas computadoras, tu mueves el raton y un segundo despues este reacciona.
A que se debe esto?
Como se puede hacer para que esto no pase?

Supongo que algo tendrá que ver la saturacion del CPU ... pero no estoy seguro ...

Si alguien sabe algo se agradece!

Saludos
Título: Eventos del raton demorados
Publicado por: tamat en 07 de Marzo de 2008, 02:34:24 PM
En el tema del input hay dos maneras de pillarlo, por mensaje o por encuesta.

Por mensaje es que esperas a que el API (SO, o lo que sea) te envie un mensaje informandote que el raton se ha movido. Esto suele ser horrible para juegos ya que si la CPU va al tope entonces los mensajes llegan cuando le da la gana.

Por encuesta es que tu le preguntas directamente al periferico el estado de cierta tecla/cursor. Esto es inmediato (aunque supongo que tiene un ligero overhead) y normalmente se hace durante la fase de update de la aplicación, así garantizas que no haya latencia.
Título: Eventos del raton demorados
Publicado por: Zaelsius en 07 de Marzo de 2008, 02:43:00 PM
En castellano, que hagas polling del ratón xD . Ahora mismo no sé si en Windows se puede hacer sin pasar por DirectInput (supongo que sí).
Título: Eventos del raton demorados
Publicado por: Pogacha en 07 de Marzo de 2008, 03:21:21 PM
Gracias por las respuestas,

La idea es no usar DInput, para poder asi coordinar el puntero del juego con el puntero del mouse.

Tanto el WM_MOVE, como GetCursorPos me devuelven valores tardios ...

Puedo probar a hacer un Sleep(0); una vez por frame ... pero como no es en mi computadora que pasa no puedo saber los resultados hasta dentro de un tiempo.
Título: Eventos del raton demorados
Publicado por: fjfnaranjo en 07 de Marzo de 2008, 03:47:02 PM
Quizá te interese consultarlo en alguna librería multiplataforma, como SDL, para ver como lo hacen ellos...
Título: Eventos del raton demorados
Publicado por: Pogacha en 07 de Marzo de 2008, 04:08:46 PM
SDL usa GetCursorPos ...

Hasta ahora tengo para probar tan solo hacer un Sleep(0) en cada frame cosa de dar mas tiempo al sistema.

Tambien a los mensajes de windows los atiendo con un
while(PeekMessageA(&msg,hWnd,0,0,PM_REMOVE))
{
// if(AccelerationTable) TranslateAccelerator(hWnd, AccelerationTable, &msg);
TranslateMessage(&msg);
DispatchMessageA(&msg);
}


Se les ocurre algo mas que pueda probar?
Título: Eventos del raton demorados
Publicado por: tamat en 07 de Marzo de 2008, 07:23:57 PM
Si SDL usa GetCursorPos entonces no me cuadra, yo en SDL nunca he tenido latencia en el raton, ni en escenas horriblemente cargadas (en GLUT que usa mensajes si).
Título: Eventos del raton demorados
Publicado por: Pogacha en 07 de Marzo de 2008, 07:41:32 PM
Yo tampoco, pero en una de las maquinas donde probe mi motor eso pasa ...
y es realmente problematico.
Título: Eventos del raton demorados
Publicado por: [EX3] en 07 de Marzo de 2008, 09:29:47 PM
Yo en dx_lib32 tengo igualmente implementado GetCursorPos() y jamas he tenido problemas de retardos.

Por otro lado, los problemas de retardos de cursor, seguro que es el cursor y no el render el que se demora? Recuerdo el Half-Life cuando lo configurabas para renderizar con Direct3D en vez de OpenGL y la vista iba con retardo respecto al movimiento del raton y teclado, pero esto tampoco pasaba en todas las maquinas (aunque si en la mayoria)

Salu2...
Título: Eventos del raton demorados
Publicado por: Pogacha en 07 de Marzo de 2008, 09:46:47 PM
Si ahí mismo es en donde yo lo habia visto antes.
Es realmente extraño pues mis busquedas por internet hablan del famoso "mouse lag" y que lo solucionan usando GetCursorPos ! :shock:
Me parece que lo unico que voy a hacer es probar agregando este Sleep(0) y no complicarme mas pues en realidad es un problema unico y seguro que hay solución ...
Por otro lado, seguro que el problema esta en el parte de windows y no de como estoy implementando las cosas, pero eso al usuario final no le importa :P

Saludos y muchas gracias
Título: Eventos del raton demorados
Publicado por: fjfnaranjo en 07 de Marzo de 2008, 09:51:52 PM
Puede que sea un problema de la máquina en concreto, más que del programa, sobre todo si tanta gente lo ha solucionado ya con GetCursorPos (te propuse el ejemplo de SDL porque a mí siempre me ha ido muy bien).

Prueba ejecutarlo en otro equipo, o limpia el ratón  :P
Título: Eventos del raton demorados
Publicado por: Pogacha en 07 de Marzo de 2008, 10:04:26 PM
Gracias por el consejo, pero lamentablemente no tengo acceso a la maquina y tampoco puedo abusar de su generosidad pidiendole que haga muchas pruebas. Y sí es un problema en particular (cierta combinacion de hardware y software), pero este se repetirá varias veces, por lo tanto, queria solucionarlo.
Título: Eventos del raton demorados
Publicado por: Vicente en 08 de Marzo de 2008, 09:38:27 AM
Nosotros en Jade usamos los mensajes de Windows para el input y no hemos tenido tampoco problemas (o no hemos encontrado una máquina que nos los de).

Un saludo,

Vicente
Título: Eventos del raton demorados
Publicado por: Pogacha en 08 de Marzo de 2008, 03:16:25 PM
Gracias por el aporte.
Título: Eventos del raton demorados
Publicado por: Loover en 08 de Marzo de 2008, 03:59:32 PM
Yo uso GetCursor() a través de SDL y sin problemas de momento. No te obsesiones, ponle un sleep(0) y a correr.
Título: Eventos del raton demorados
Publicado por: Pogacha en 08 de Marzo de 2008, 04:09:06 PM
Si me parece que eso voy a hacer.