Как заставить функцию скриншота pyautogui работать на Mac? Как обмануть игру T-rex с Python на Mac?

Игра T-rex: http://www.trex-game.skipser.com/

Я несколько раз пытался изменить коды в соответствии с инструкциями на YouTube(Davidd That Me: https://www.youtube.com/watch?v=xYymkeNh2lE), но не смог.

Код на YouTube находится в Windows, а мой - в MacOS.

Установлены как pyobjc, так и pyobjc-core. (MacOS)

Получите координаты экрана (x-пиксель, y-пиксель) с помощью «Shift-Command-4» (MacOS)

pyautogui.moveTo (x, y): Пинтер мыши перемещается в указанное место правильно, как считывается с помощью «Shift-Command-4» (Координаты экрана).

Но...

pyautogui.screenshot(region = (left, top, width, height): я обнаружил, что целое число, которое нужно вставить в «left» (а также другие параметры), необходимо умножить на 2, чтобы правильно получить снимок экрана в желаемых областях.

Я бы хотел знать...

  1. почему координаты, введенные в функцию скриншота (pyautogui.screenshot()), отличаются от координат, полученных из экранных координат. А также

  2. Возможно, у библиотеки pyautogui есть проблемы с стабильностью? Я пробовал много раз, иногда функция screenshot () работает нестабильно, например, изображение, полученное из функции, изменяется, а экран остается прежним, или значение, возвращаемое функцией getcolors (), равно нулю, а изображение белое.

Ниже мой код.

Любая помощь будет оценена.

'''

      from PIL import ImageGrab   # The ImageGrab module can be used to copy the contents of the screen
from PIL import ImageOps    # Analyze it to find out whether it's gray or white
import pyautogui            # Control mouse and keyboard
import time
from numpy import *

replaybtn = (640, 530)
dianosaur = (407, 540)

# i for debugging
i = 0

def restartGame():
    pyautogui.moveTo(replaybtn, duration=0.5)
    pyautogui.click(replaybtn)
    print("I just clicked play buttom.")

def image_grab():
    global i

    # (left_x, top_y, width, high)
    # box = (2*dianosaur[0]+10, 2*dinosaur[1], 2*dianosaur[0]+50, 2*dianosaur[1]+10)
    # image = ImageGrab.grab(box) 

    # region = (left_x, top_y, width, high)
    image = pyautogui.screenshot(region=(2*dianosaur[0]+10, 2*dianosaur[1],50, 10))
    
    # For debugging
    # image.save(str(i) + '.png')
    
    grayImage = ImageOps.grayscale(image)
    a = array(grayImage.getcolors())

    # For debugging
    # White screen a.sum =  1247
    print(a)              
    print('a.sum = ', a.sum())
    if (a.sum() != 1247):
        image.save(str(i) + '.png')
    i+=1

    return a.sum()

def pressSpace():
    time.sleep(0.1)
    pyautogui.keyDown('space')
    print("Space pressed.")
    

time.sleep(3)
restartGame()

try:                    
    while True:
        image_grab()
        if (image_grab() != 1247):
            pressSpace()    
            time.sleep(0.1) 
except KeyboardInterrupt:
    print("\nDone...")        

'''

0 ответов

Другие вопросы по тегам