Página 1 de 1

función con PixelGetColor no funciona sobre flash

Publicado: 08 Feb 2016, 01:56
por trycton
Hola! Hace poco cree un pequeño script para automatizar una serie de acciones del ratón para un juego en flash. La idea es al siguiente:

- Una función(A) controla 30 pixeles individuales de la pantalla.
- Al detectar un cambio en alguno de esos pixeles, la función termina y llama a otra(B) que activa un movimiento de ratón.
- Una vez realizado el movieminto de ratón, se vuelve a llamar a la función incial.
- Se repite el proceso en forma de bucle.

¿El problema? Que sobre dicho juego (flash en navegador) no funciona. Error:

La función A devuelve valor '0' al no cumplirse ninguna de las premisas (no detecta ningún cambio en esos 30 pixeles). La función no está preparada para dar error, es decir, funciona a modo de bucle hasta que uno de sos 30 pixeles sea modificado. El caso es, que sobre un documento Word (por ejemplo) funciona perfectamente, hasta que no se modifica uno de esos pixeles, el script permanece en bucle esperando. Sin embargo, sobre el juego, la mayoria de veces la función devuelve false sin opción a ello.

¿Alguien sabría algo?

Re: función con PixelGetColor no funciona sobre flash

Publicado: 08 Feb 2016, 07:15
por diego
Desconozco como obtenes los colores en pantalla, pero tuve un caso parecido con un juego y hasta que no agrege

Opt("PixelCoordMode",0)

Al comienzo del codigo, me daba error en los colores.
Espero te ayude eso, y sino estaria bien que expliques como obtenes los colores o pongas el codigo aca

Re: función con PixelGetColor no funciona sobre flash

Publicado: 08 Feb 2016, 15:32
por Dany
tambien puedes usar PixelChecksum.

Saludos

Re: función con PixelGetColor no funciona sobre flash

Publicado: 08 Feb 2016, 19:18
por trycton
diego escribió:Desconozco como obtenes los colores en pantalla, pero tuve un caso parecido con un juego y hasta que no agrege

Opt("PixelCoordMode",0)

Al comienzo del codigo, me daba error en los colores.
Espero te ayude eso, y sino estaria bien que expliques como obtenes los colores o pongas el codigo aca
Muy sencillo, con PixelGetColor(x,y). En este caso, no da error en los colores, simplemente la función termina arrojando 'false' en lugar de esperar en bucle hasta encontrar un cambio de color(true).
Dany escribió:tambien puedes usar PixelChecksum.

Saludos
El problema era el mismo. De hecho, la función inicial era con PixelChecksum pero no funciona correctamente, el problema era parecido. Entonces decidí usar el PixelGetColor y el problema persistía. Más adelante podría poner un ejemplo de la función...

Re: función con PixelGetColor no funciona sobre flash

Publicado: 08 Feb 2016, 21:24
por Chefito
Dinos la página del juego flash e intentaremos ayudarte mejor. Y si das el código entero mejor.

Como utilizas la función pixelgetcolor?
Utiliza el programa espía AutoIt Windows Info que trae autoit y obtén el handle del control flash con la función controlgethandle para luego pasársela como parámetro a la función pixelgetcolor. Eso puede que te solucione lo de la obtención del color.

Si no te funciona eso, siempre te quedará las funciones udf gdiplus que trae autoit. Son bastante difíciles de utilizar, pero para detectar un color de un pixel no se necesita mucho :smt023 .

Saludos.

Re: función con PixelGetColor no funciona sobre flash

Publicado: 09 Feb 2016, 13:24
por trycton
Esta sería la función, aquí se puede observar de que manera utilizo el PixelGetColor y el bucle que espera el cambio de color.

Código: Seleccionar todo

Func checkingColor()

    Sleep(1000)

   $n0 = PixelGetColor (593, 293)
   $n1 = PixelGetColor (575, 345)
   $n2 = PixelGetColor (625, 315)
   $n3 = PixelGetColor (670, 280)
   $n4 = PixelGetColor (603, 363)
   $n5 = PixelGetColor (650, 330)
   $n6 = PixelGetColor (690, 290)
   $n7 = PixelGetColor (625, 380)
   $n8 = PixelGetColor (670, 345)
   $n9 = PixelGetColor (740, 310)
   $n10 = PixelGetColor (675, 400)


   While ($n0 = PixelGetColor (593, 293) And $n1 = PixelGetColor (575, 345) And $n2 = PixelGetColor (625, 315) And $n3 = PixelGetColor (670, 280) And $n4 = PixelGetColor (603, 363) And $n5 = PixelGetColor (650, 330) And $n6 = PixelGetColor (690, 290) And $n7 = PixelGetColor (625, 380) And $n8 = PixelGetColor (670, 345) And $n9 = PixelGetColor (740, 310) And $n10 = PixelGetColor (675, 400))
	 Sleep(1000)
   WEnd

   If ($n0 <> PixelGetColor (593, 293)) Then
	 return 100
   EndIf

   If ($n1 <> PixelGetColor (575, 345)) Then
	  return 1
   EndIf

   If ($n2 <> PixelGetColor (625, 315)) Then
	 return 2
   EndIf

   If ($n3 <> PixelGetColor (670, 280)) Then
	 return 3
   EndIf

   If ($n4 <> PixelGetColor (603, 363)) Then
	 return 4
   EndIf

   If ($n5 <> PixelGetColor (650, 330)) Then
	 return 5
   EndIf

   If ($n6 <> PixelGetColor (690, 290)) Then
	return 6
   EndIf

   If ($n7 <> PixelGetColor (625, 380)) Then
	 return 7
   EndIf

   If ($n8 <> PixelGetColor (670, 345)) Then
	  return 8
   EndIf

   If ($n9 <> PixelGetColor (740, 310)) Then
	  Return 9
   EndIf

   If ($n10 <> PixelGetColor (675, 400)) Then
	  Return 10
   EndIf

MsgBox(0, "", "Error?")

EndFunc
Si se dan cuenta, al final hay un MsgBox que se ejecuta si ningún If se cumple, es decir, si la función funciona correctamente ese mensaje nunca debe de ejecutarse.

Re: función con PixelGetColor no funciona sobre flash

Publicado: 09 Feb 2016, 18:39
por trycton
Solucionado. El problema estaba en el bucle while. Resulta que habia repetido el mismo número dos veces con coordenadas distintas dando lugar al error.

:smt023 :smt023