Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: pepepeito en 16 de Febrero de 2005, 04:40:32 PM

Título: Directx Y Visual Basic
Publicado por: pepepeito en 16 de Febrero de 2005, 04:40:32 PM
 Holaa tod@s, antes de nada felicitaros por vuestro fantástico foro al que he accedido por referencias. Mi consulta es la siguiente. Estoy haciendo una aplicación en Visual Basic para el control de Ciber Cafés y me gustaría poder mostrar el tiempo restante del cliente mientras éste esté jugando, imprimiendolo encima del juego.  ¿Es esto posible?, y si es así, me podríais dar alguna inducación de como hacerlo.

Gracias y un saludo....
Título: Directx Y Visual Basic
Publicado por: Sacrifai en 16 de Febrero de 2005, 04:46:53 PM
 Supongo que deberás dibujar directamente en la memoria, aunque no se si con el juego luego funcionará.
Título: Directx Y Visual Basic
Publicado por: senior wapo en 16 de Febrero de 2005, 04:50:36 PM
 Si que es posible, de diversas maneras. La cuestión es si te conviene o te va a ser perjudicial de cara al negocio (mala imagen), pero en eso yo no me meto.

Puedes dibujar directamente sobre la pantalla usando GDI, obtienes un handle de ventana para la ventana del escritorio (GetDesktopWindow() creo que era) abres un DC y escribes. Funciona incluso aunque haya una ventana de DirectX abierta (un juego). Solo tienes que repetir el proceso frecuentemente para refrescar la pantalla (1 vez por segundo por ejemplo). He visto hacerlo a varios programas.

Alternativamente puedes tener una ventana de toda la vida y asegurarte que siempre esta en primer plano (puedes pintarla transparente) aunque no tenga el foco. Hay un estilo de creación de ventanas que indica que la ventana será transparente y una manera de indicar que la ventana sera de tipo TOPMOST.

De cualquiera de las dos maneras tendrás que usar un temporizador y refrescar la ventana frecuentemente, con el consiguiente decremento de rendimiento del equipo.

Los jugadores de Quake/CounterStrike/HalfLife y similares te odiaran por la perdida de FPS, y el resto se sentirán incómodos por el letrero supongo.  
Título: Directx Y Visual Basic
Publicado por: Zaelsius en 16 de Febrero de 2005, 04:52:45 PM
 Sí, es posible, pero... hay que ser un hacha para conseguirlo :rolleyes: . Deberias usar C/C++, y un método parecido al que usa FRAPS para mostrar los FPS.

Básicamente se trata de interceptar las llamadas a la API DirectX. El método viene a ser, "más o menos", capturar el método Present() del dispositivo DX9, momento en el cual tu pintas tu texto sobre el framebuffer, y llamas a la función Present() original.

El tema de los "hooks"(interceptaciones) es complejo, requiere un profundo conocimiento de la API Win32. Sabiendo de qué va el tema, puedes encontrar algunos artículos y referencias buscando un poco.

En Visual Basic, nada que hacer me temo :ph34r:

Edit: Lo que se propone en el mensaje anterior es perfectamente viable, no lo he visto hasta despues de publicar el mio :P . Mi respuesta es algo "hardcore", pero es la única opción para no ralentizar los juegos, además como especificaste "DirectX" en el título del hilo...
Título: Directx Y Visual Basic
Publicado por: pepepeito en 16 de Febrero de 2005, 05:13:49 PM
 Gracias a todos por vuestras respuestas, me están sirviendo de mucha ayuda y sobre todo de aclaración de ideas...

Salu2
Título: Directx Y Visual Basic
Publicado por: Haddd en 16 de Febrero de 2005, 05:21:52 PM
 Puedes hacer que el juego se abra en modo ventana a una resolución determinada y tener otra ventana donde vas mostrando el tiempo que queda y otras cosas que te interesen.