Как заставить функцию скриншота 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, чтобы правильно получить снимок экрана в желаемых областях.
Я бы хотел знать...
почему координаты, введенные в функцию скриншота (pyautogui.screenshot()), отличаются от координат, полученных из экранных координат. А также
Возможно, у библиотеки 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...")
'''