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?
función con PixelGetColor no funciona sobre flash
Re: función con PixelGetColor no funciona sobre flash
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
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
tambien puedes usar PixelChecksum.
Saludos
Saludos
- ............................................
......................................
Re: función con PixelGetColor no funciona sobre flash
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).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
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...Dany escribió:tambien puedes usar PixelChecksum.
Saludos
- Chefito
- Profesional del Autoit
- Mensajes: 2035
- Registrado: 21 Feb 2008, 18:42
- Ubicación: Albacete/Cuenca (España)
Re: función con PixelGetColor no funciona sobre flash
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 .
Saludos.
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 .
Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Re: función con PixelGetColor no funciona sobre flash
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.
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.
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
Re: función con PixelGetColor no funciona sobre flash
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.