Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Directx Y Visual Basic

Iniciado por pepepeito, 16 de Febrero de 2005, 04:40:32 PM

« anterior - próximo »

pepepeito

 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....

Sacrifai

 Supongo que deberás dibujar directamente en la memoria, aunque no se si con el juego luego funcionará.

senior wapo

 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.  

Zaelsius

 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...

pepepeito

 Gracias a todos por vuestras respuestas, me están sirviendo de mucha ayuda y sobre todo de aclaración de ideas...

Salu2

Haddd

 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.






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.