Зависает ввод с клавиатуры при работе с библиотеками ввода с клавиатуры/мыши
Пытаюсь сделать Anti-AFK в Minecraft, суть заключается в том, чтобы при нажатии F7 включалось Anti-AFK и персонаж бегал по квадрату, но так же необходимо, чтобы ввод с клавиатуры не блокировался и при начатом Anti-AFK игрок тоже мог управлять персонажем. Но когда я включаю Anti-AFK, персонаж бегает по квадрату, но если попытаться поуправлять им как-нибудь, то управления нету, либо действие(допустим нажатие пробела) зависает и персонаж продолжает бегать с припрыжкой. Скажите, пожалуйста, как это можно исправить?
import pyautogui
import pydirectinput # тоже библиотека для управления клавиатурой и мышью.
from pynput import keyboard
class Main:
def __init__(self):
self.collect_events()
def collect_events(self):
with keyboard.Listener(on_release=self.check_pressed_button) as k_listener:
k_listener.join()
def check_pressed_button(self, key):
if key == keyboard.Key.f7:
print('Anti-AFK is starting')
for global_repeat in range(12):
for local_repeat in range(4):
pydirectinput.keyDown('w')
pyautogui.moveRel(-782, 0)
pydirectinput.keyUp('w')
print('Anti-AFK is ending')
obj = Main()
Ответы (1 шт):
Обязателен ли именно такой алгоритм работы как у вас? Мне удалось решить проблему путем использования библиотеки keyboard (pip install keyboard) и Документация.
В цикле while True идет точно такое же ожидание нажатия клавиши F7, после нажатия запускается алгоритм и работает без указанных вами проблем. После выполнения, в цикле снова ожидается нажатие F7
import pyautogui
import keyboard
while True:
keyboard.wait('f7')
print('Anti-AFK is starting')
for global_repeat in range(12):
for local_repeat in range(4):
pyautogui.keyDown('w')
pyautogui.moveRel(-782, 0)
pydirectinput.keyUp('w')
print('Anti-AFK is ending')
Что касается мышки, здесь ситуация другая. Мышка также контролируется библиотекой, но при попытке ее использования, такого ощущения контроля со стороны пользователя, как с клавиатурой, не будет. Самое простое, что можно сделать - реализовать бег по квадрату полностью через клавиатуру, то есть клавиши "WASD".