Programación Específica => Programación de Videojuegos => DirectX => Mensaje iniciado por: JuanK en Sábado 25 de Septiembre de 2004, 05:58
Título: Cursor Del Mouse
Publicado por: JuanK en Sábado 25 de Septiembre de 2004, 05:58
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);
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
Título: Re: Cursor Del Mouse
Publicado por: Ruben3d en Sábado 25 de Septiembre de 2004, 13:32
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
Título: Re: Cursor Del Mouse
Publicado por: JuanK en Domingo 26 de Septiembre de 2004, 05:28
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.
Título: Re: Cursor Del Mouse
Publicado por: JuanK en Domingo 26 de Septiembre de 2004, 11:26
Hola, aca esta la solución: Solución (http://www.vjuegos.org/modules.php?name=Forums&file=viewtopic&t=695&sid=386222996f460a294e150aa5ba0f1923)
Título: Re: Cursor Del Mouse
Publicado por: Ruben3d en Domingo 26 de Septiembre de 2004, 15:11
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
Título: Re: Cursor Del Mouse
Publicado por: JuanK en Martes 28 de Septiembre de 2004, 04:27
si son parecidos en principio, sin embargo al plantar mi primera solucion (la cual como ya lo mencione es igual a la que me sugeriste) me encontre con muchos problemas, principalmente porque el sistema aparenta ser solo cuestion de proporciones y ya , pero realmente cuando profundice un poco mas me di cuenta de que se trataba de un sistema de proporciones y variantes entre tres rectangulos: tamaño de la superficie tamaño de la ventana -o tamaño del area cliente tamaño real del area cliente (es decir al escalarlo)
y con el otro planteamiento (por lo menos yo) no veia sino dos rectangulos tamaño de la superficie tamaño de la ventana
asi que ya se ponia como complicado pero lo de la proporcion porcentual relativa a la escala es mas sencillo.
Título: Re: Cursor Del Mouse
Publicado por: Ruben3d en Viernes 1 de Octubre de 2004, 14:21
De acuerdo, en OpenGL funciona como te dije, pero esto es DirectX :)
Un saludo.
Ruben3d
Título: Re: Cursor Del Mouse
Publicado por: JuanK en Sábado 2 de Octubre de 2004, 16:11
lo tendre en cuenta si me pasa en OpenGL :rolleyes: