Realizar accion al cambiar de color un pixel

Iniciado por Demereth, 1 Septiembre 2012, 17:08 PM

0 Miembros y 1 Visitante están viendo este tema.

Demereth

Hola, lo que quiero hacer es para un juego, en el que hay barras de estados,de hambre, energía, sed, magia y vida, que al bajar, ya sea por no comer, usar hechizos o que algo te cause algún daño, van volviéndose color negro, lo que quiero hacer es que a la barra de vida(roja) y magia(azul) que al bajar se vuelve negra, clickee automaticamente las pociones, para que vuelvan a llenarse las barras, esto solo quiero con la magia y la vida:



Aquí estarían las barras llenas al máximo y lo que quiero es que detecte cuando van volviendose negras:




Cuando recibiese daño o gastase mana la barra bajaría y quedaría más o menos como en la imagen de arriba. Al detectar que ha cambiado el color a negro enviaria clicks a las coordenadas de las pociones hasta que vuelva a llenarse la barra. Y así automáticamente cada vez que la vida o mana bajase de ese nivel se auto-sanaría sólo y así me ahorro tener que andar haciendolo yo.

Saludos y gracias!

Dunkansdk

En la interfaz el fondo es negro, y tiene arriba un pic que calcula el porcentaje de la vida :|

Yoghurt

El color del pixel lo obtienes con:
Código (vb) [Seleccionar]
Declare Function GetPixel Lib "GDI32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long
X e Y son las coordenadas del pixel en la ventana de la aplicacion.

El hDC es la capa grafica (display device context - DC) de una aplicación y lo obtienes con:
Código (vb) [Seleccionar]
Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long

El hwnd es el identificador de ventana (handle window) y lo obtienes con:
Código (vb) [Seleccionar]
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long ...y te recomiendo leer esto: FindWindow Example

Creo que con eso será suficiente para ahorrarte "unos clicks".

P.D.: A veces los juegos pintan los graficos en un hDC distinto al que le entrega el sistema (debido a DirectX) o Por la configuración de pintado, pintado fijo (mas lento ya que se memoriza los pixels y es facil obtener el color de alguno) o pintado volatil (mas rapido y sin memoria de pixel). Todo esto supone un obstaculo al momento de obtener el ínfimo pixel pero solucionable, solo busca y pregunta.