x=0
while x==0:
    target = pyautogui.locateOnScreen(os.path.expanduser(r'~\Desktop\ bot\references\target.png'),region=(0,0,1024,768),confidence=.7)
    time.sleep(0.5)
    target2 = pyautogui.locateOnScreen(os.path.expanduser(r'~\Desktop\ bot\references\target2.png'),region=(0,0,1024,768),confidence=.7)
    print(target,target2)
    if target and target2 is None:
        pyautogui.keyDown('W')
    elif target or target2 != None:
        pyautogui.keyUp("W")
        print(target or target2)
        target_point = pyautogui.center(target or target2)
        targetx, targety = target_point
        pyautogui.click(targetx, targety)
        x=1

(el código debe recrearse con los módulos importados) ¡Hola a todos! Estaba tratando de crear un bot simple para un juego que avanza cuando no detecta un objetivo, pero deja de moverse cuando se detecta el objetivo. ¿Por qué esto no hace que se presione la tecla W? ¿Qué es extraño es que cuando se detecta target o target2.png, presiona W de lo contrario no lo hace?

0
sanguine 23 ago. 2020 a las 05:23

1 respuesta

La mejor respuesta

El problema aquí es que Python trata algunos valores como verdaderos y otros como falsos.

En Python, None, 0 y "" (cadena vacía) se consideran falsos. Cualquier otro valor se considera verdadero.

En su código, hay esta línea:

if target and target2 is None:

Si bien la frase suena bien (si ambos son Ninguno), lo que realmente está sucediendo es que target se convierte a un booleano en la evaluación:

if bool(target) == True and target2 is None:

Dado que target no es None/0/"", la conversión bool devuelve True. Esto está provocando un comportamiento inesperado en el código.

La misma idea se aplica a la declaración elif

1
Mike67 23 ago. 2020 a las 02:44