Помогите с зацикливанием части кода
В общем, делаю бота для школьного проекта для игры. Бот должен увидеть объект, получить его координаты и пойти к объекту. Но что-то пошло не так. Помогите, проблема в первом действии бота ('a')
import cv2
import pyautogui as py
import numpy as np
import time
import pyscreenshot as ImageGrab
time.sleep(5)
#-------------------------------ВСЕ--ОК------Ищем обект--------------------------
position = cv2.imread('rf.png')
print(type(position), position.shape)
cat_hsv = cv2.cvtColor(position, cv2.COLOR_BGR2HSV)
red_low = (0,125,0)
red_high = (8,255,255)
red_hsv = cv2.inRange(cat_hsv, red_low, red_high)
#-------------------------Получаем-X-точки-------------------------------
moments = cv2.moments(red_hsv, 1) # получим моменты
x_moment = moments['m01']
y_moment = moments['m10']
area = moments['m00']
x = int(x_moment / area) # Получим координаты x,y обекта
#------------------Действия-бота----------------------------------------
py.keyDown('w') #только вперед
mid=512 # ориентир пикселей экрана по х
while True: #цикл, пока точки не совместятся
a1 = (py.position()) #движение left
a = a1[1]
if mid > a:
py.keyDown('a') #//////ЗАЦИКЛИВАЕТ!!!!!!!!!//////////
if mid==a:
py.keyUp('a')
break
while True:
d1 = (py.position()) #движение right
d = d1[1]
if mid < d:
py.keyDown('d')
if mid==d:
py.keyUp('d')
break
while True:
if red_low and red_high == None:
py.moveTo(300, None)
if cat_hsv == cv2.cvtColor(position, cv2.COLOR_BGR2HSV):
break
Ответы (1 шт):
Автор решения: Alex Alex
→ Ссылка
Замените if mid==a: на if mid<=a:
Видимо нажатие клавиши сдвигает курсор не по одному пикселю, а сразу по несколько. И точное равенство никогда не происходит, отсюда и зацикливание.