Programación Específica > DirectX

 Cursor Del Mouse

(1/2) > >>

JuanK:
saludos,
estoy tratando de crear mi propiopountero de mouse para mostrar con directdraw dentro de un juego, para tal fin solo le diogo a nu dibujo que se dibuje tomando como coordenada la posicion del mouse en el formulario.

Para lograrlo tomo la posicion del mouse en pantalla a travez de Control.MousePosition y luego la convierto a posicion delmouse dentro de la forma usando
punto = forma.PointToClient(Control.MousePosition);

y luego solo dibujo en una surface secundaria de 640*480 para luego hacer blit en la superficie principal.

Todo me funciona OK!

pero cuando cambio de tamaño la forma el mouse no se comporta como yo esperaria y al parecer sigue conviertiendo las coordenadas como sino hubiese cambiado el tamaño de la forma.. lo cual ocaciona muchos problemas ya que aunque el mouse este por fuera de la froma al disminuir el tamaño, el dibujoi que se supone hace las veces de cursor se dibuja dentro de la forma en posiciones que no tienen  que ver con la del mouse.. como se ve en el dibujo...

Que puedo hacer para solucionar esto?
alguien ha logrado mover el mouse dentro dentro de una superficie de directdraw
sin que el comportamiento del dibujo que hace las veces de mouse  se altere al cambiar el tamaño de la forma?

agradezco cualquier idea.

Este es el codigo que recalcula la posicion:

--- Código: Text --- p = forma.PointToClient(Control.MousePosition);  
Este es el codigo donde se dibuja en la superficie secundaria:

--- Código: Text --- surSecundaria.DrawFast(p.X, p.Y, sf,dff);  donde sf es el dibujo del cursor y dff son los flags para el color de mascara.

Este es el codigo donde se dibuja la superifie secundaria en la superficie principal:

--- Código: Text --- rectangulo = new Rectangle(propietario.PointToScreen(new Point(0,0)),forma.ClientSize);surPrimaria.Draw(rectangulo,surSecundaria , DrawFlags.Wait);  
donde rectangulo es el area donde se debe dibnujar la superficie secundaria, es decir es el area de la forma.
forma.. pues es la forma
y propietario es el equivalente a forma.Control

Ruben3d:
Hola.

No uso DirectX, pero con OpenGL me encontré con una situación similar. Cuando creo la ventana (digamos de 640x480) configuro el viewport donde se pinta al mismo tamaño (glViewport). A continuación (para gráficos 2D) uso glOrtho para configurar el rango de coordenadas. Si las configuro igual que las del viewport, si el mouse está en la coordenada del formulario (23,56) y lo pinto en el mismo lugar, coincidirá. Pero si el rango de coordenadas es diferente al tamaño del viewport ya no coinciden. Esto sucede cuando redimensiono la ventana: la cambio de tamaño y proporción, y las coordenadas virtuales para pintar siguen siendo 640x480, aunque el tamaño de la ventana sea otro. Esto viene bien porque todo lo que se pinte se cambia solo de proporción para ajustarse al nuevo tamaño, pero no coincide ya la coordenada del ratón.

Como solución, puedes averiguar el tamaño real del formulario y convertir la coordenada del ratón a coordenada virtual. Yo lo que hago es usar la API de Windows para establecer un cursor, así es el Windows el que se encarga de pintar en el lugar apropiado (aunque hay efectos que no se pueden realizar así).

Un saludo.

Ruben3d

JuanK:
Gracias Ruben..
si he estado mirando lo de las proporciones con respecto a la ventana... pero algo sigue fallando y no he podido determinar que es...
en todo caso el problema es tal como lo has pintado...
si llego a una solucion te lo hare saber.

Gracias!!!

Le pegare una revisada de nuevo a lo de las ventanas para ver si me falto tener en cuenta algo.

JuanK:
Hola,
aca esta la solución:
Solución

Ruben3d:
Hola.

Felicidades por el éxito. Gracias por compartir la solución. Parece una de las que te di (aunque usa porcentajes en vez de convertir directamente a coordenadas virtuales).

Un saludo.

Ruben3d

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa