Funcion y loop "Do ... Until" no me funciona

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
ziknos
Aprendiz de Mago
Mensajes: 50
Registrado: 02 Mar 2009, 17:36

Funcion y loop "Do ... Until" no me funciona

Mensaje por ziknos »

Global $exitcolor = pixelgetcolor(425, 249)

Func _GAME()
Local $exitcolor = pixelgetcolor(425, 249)
If _WAIT(564, 49, 2847010, 150) = False Then Return False
sleep(100)
Do
Mouseclick("right", 1008, 711, 2)
Sleep(5000)
Until $exitcolor = 18539231 (número inventado, el correcto no lo tengo ahora :P)

Return False

EndFunc


He probado declarando la variable en Global y en Local a ver si la coje pero no hay manera, en cambio, haciendo una página nueva, fuera de ese script y de esa función y poniendo lo siguiente :

Local $exitcolor = pixelgetcolor(425, 249)
Do
Mouseclick("right", 1008, 711, 2)
Sleep(5000)
Until $exitcolor = 18539231 (número inventado, el correcto no lo tengo ahora :P)


Esta sí que funciona por separado pero la misma dentro de la función y de mi script no lo detecta.

Cuál puede ser el motivo ??


Gracias
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2091
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Funcion y loop "Do ... Until" no me funciona

Mensaje por BasicOs »

Tienes que hacer que $exitcolor cambio dentro del LOOP y no fuera para cuando mueves el ratón y va actualizandose el valor de la variable según cambian los pixeles de la posición del ratón cambiada. (Mousegetpos())
$pos = MouseGetPos()
MsgBox(0, "Mouse x,y:", $pos[0] & "," & $pos[1])
Puedes hacer un msgbox o un display en el Tray para que cada tiempo (eg un sleep) te muestre el valor de $exitcolor.
Salu22:)
ziknos
Aprendiz de Mago
Mensajes: 50
Registrado: 02 Mar 2009, 17:36

Re: Funcion y loop "Do ... Until" no me funciona

Mensaje por ziknos »

Hola, disculpa pero no entendí muy bien, la función lo que quiero que haga es

Primero el _Wait es una función para un "pause" hasta que salga el color que pone, entonces sigue en ejecución, si después de los 150 segundos que pone no ha salido el color, devuelve "False" y se reinicia todo el script.

Después una vez ha encontrado ese primero "wait" tiene que hacer clicks en un mismo punto hasta que el $exitcolor sea el indicado, entonces hará click en otro punto de la pantalla para finalizar.

No entiendo el motivo por el cual no me funciona de una forma y sí de la otra, si es prácticamente lo mismo.

Gracias :)

si añado : $exitcolor = pixelgetcolor(425, 249) dentro del "Do" .... Until me funcionará? necesito que no salga ningún msgbox ni nada así por que podría molestar en el medio de la pantalla.

gracias :smt002
Avatar de Usuario
arkcrew
Profesional del Autoit
Mensajes: 506
Registrado: 28 Sep 2009, 19:17
Ubicación: Granada, España
Contactar:

Re: Funcion y loop "Do ... Until" no me funciona

Mensaje por arkcrew »

Hola,

La estructura del Do-Until es algo asi como, "hacer hasta que".

Lo que veo que tienes mal, la funcion que pausa, al estar fuera del bucle solo se ejecuta una vez por lo tanto si al principio esta el pixel bien contunuará mientras que si está erróneo, tirará error pero NO se volverá a ejecutar ya que habrás entrado de lleno en el bucle.

Debes tener muy claro que para que una función se ejecute o compruebe debe estar dentro de un bucle, asi pues, lo que yo haría sería meter en un while todo ello con algo como while "el color del pixel es el bueno" bucle wend y dentro del bucle ejecutar las acciones, asi está todo el rato comprobando el pixel y de ser válido ejecuta el código.

Espero que te sea de ayuda.

Saludos!
Responder