【发布时间】:2018-11-15 15:38:37
【问题描述】:
总而言之,我正在尝试以编程方式 - 并且在外部 - 控制 Minecraft 玩家的方向。
游戏环境没有 API,没有 Java 模组
通常这需要移动鼠标,但我尝试过的每一个模拟 python3 库的鼠标移动都不会在游戏中移动玩家的头部。每个库也做不同的事情。
例如,在脚本完成后手动移动鼠标之前,pyautogui 不会执行任何操作。这样做会在继续跟随您当前的鼠标移动之前,将玩家的视线转移到程序应该将其移动到的位置。两个鼠标命令都会出现这种情况。
import pyautogui
pyautogui.moveTo(500, 500)
pyautogui.moveRel(100, 100)
pynput 库的结果和 pyautogui 一样奇怪:
from pynput.mouse import Controller
mouse = Controller()
mouse.position = (100, 200)
mouse.move(200, -100)
Quartz 根本不做任何事情:
import Quartz
class Mouse():
down = [Quartz.kCGEventLeftMouseDown, Quartz.kCGEventRightMouseDown, Quartz.kCGEventOtherMouseDown]
up = [Quartz.kCGEventLeftMouseUp, Quartz.kCGEventRightMouseUp, Quartz.kCGEventOtherMouseUp]
[LEFT, RIGHT, OTHER] = [0, 1, 2]
def click_pos(self, x, y, button=LEFT):
self.move(x, y)
self.click(button)
def to_relative(self, x, y):
curr_pos = Quartz.CGEventGetLocation( Quartz.CGEventCreate(None) )
x += curr_pos.x;
y += curr_pos.y;
mouse = Mouse()
mouse.to_relative(200, 200)
而且 python 鼠标库已经过时了:错误显示它只能在 Darwin 上运行(我在 macOS High Sierra 上)。由于Github 页面上的描述,我很难过得知这一点。它说“所有鼠标设备上的全局事件挂钩(无论焦点如何都捕获事件)”。然后我想,不知何故,我的世界正在自己吸收所有模拟的鼠标移动。无论哪种方式,我都没有为这个游戏使用正确的界面,我需要一些可以绕过 Minecraft 有趣的鼠标控制的东西来获得我想要的移动。
我什至尝试使用 鼠标键(mac 的鼠标移动辅助功能,让您只用键控制鼠标)和 pyautogui。
import pyautogui # with mouse keys on
import time
# mouse keys is an accessibility feature on mac that controls the mouse with the keyboard
print("[ALERT]: Make sure mouse keys is on! (press option 5 times if shortcut is enabled)")
pyautogui.keyDown('8') # up in mouse keys
time.sleep(5)
pyautogui.keyUp('8')
我对最后一个不起作用并不感到特别惊讶,但我想我已经没有办法尝试绕过使 Minecraft 不接受我的蟒蛇鼠标输入的任何东西了。在这一点上,我很确定我给计算机的输入类型一定有一些区别。作为一个程序的 Minecraft 不像其他程序那样使用鼠标,而 python 鼠标也不像其他来源那样控制鼠标,因此存在断开连接。
我在我的 macOS High Sierra 上以全屏和窗口模式运行 Minecraft,尽我所能让它正常运行。我将在 PyCharm 中启动测试脚本(python 3.6),将窗口(或窗口焦点)更改为 Minecraft(在程序中有足够的延迟时间),然后见证会发生什么。鼠标点击、键盘按下,甚至涉及命令和转义键的热键都可以在 Minecraft 中使用 pyautogui 正常工作,所以我根本不担心这些。实际上只是鼠标移动没有做任何事情。
首先,这是问这个问题的正确地方吗?还有什么可以尝试的,或者我是否缺少一些重要的东西,可以让我的鼠标输入得到正确响应?
【问题讨论】:
-
您找到适合您的方法了吗?我尝试过的所有方法(包括 Java 机器人、键盘大师、pynput)的行为都与您描述的相同。程序过程中鼠标不动,而是一手动触摸鼠标就跳转到编程的目的地。
标签: python macos mouse minecraft pyautogui