嗨,我很抱歉我标题的表达方式。我认为这是我能解释的最好的方法。
因此,这里无需解释,而是一个GIF向您展示我的问题。 注意:我只在项目中间设置了点击次数
以下是触发点击的代码:
INVEN
是一个包含56个单独值的列表。但是我编程的方式是将值成对成2。INVEN[0] = X Coords
和INVEN[1] = Y Coords
for i in range(len(INVEN) - 1):
keyboard.press(Key.shift)
Click("clear_inven", (INVEN[i], INVEN[i + 1]))
keyboard.release(Key.shift)
这是Click
代码:
def Click(pos, xy):
i = 0
while i <= 3:
if pos.upper() == "CUT_TREE":
pyautogui.click(xy[0], xy[1])
elif pos.upper() == "COMPASS":
pyautogui.click(xy[0], xy[1])
elif pos.upper() == "CLEAR_INVEN":
pyautogui.click(xy[0], xy[1])
i += 1
非常感谢您的阅读!非常感谢您的帮助:)
答案 0 :(得分:1)
问题出在这里:(INVEN[i], INVEN[i + 1])
,您的INVEN
不能正确递增:
INVEN = [674, 362, 716, 362, 758, 362, ...]
# iteration i = 0
INVEN[0] = 674 # x coord
INVEN[1] = 362 # y coord
# iteration i = 1
INVEN[1] = 362 # y coord
INVEN[2] = 716 # x coord
您可以看到这种情况很快消失了。
相反,您想这样做:
for i in range(0, len(INVEN), 2):
keyboard.press(Key.shift)
Click("clear_inven", (INVEN[i], INVEN[i + 1]))
keyboard.release(Key.shift)
使i
每次(step=2)
递增2。
但是极少建议执行range(len(INVEN))
,因为您可以轻松地遍历没有范围的对象:
for pair in zip(INVEN[::2], INVEN[1::2]):
Click('something', pair)
如果在元组中设置x, y
,可能会更好:
[(674, 362), (716, 362), (758, 362), ...]
这样可以更容易地配对使用它们:
for pair in INVEN:
Click('something', pair)
作为旁注,您可能还想在for
函数中使用while
循环而不是Click()
:
def Click(pos, xy):
for i in range(3):
if pos.upper() == "CUT_TREE":
pyautogui.click(xy[0], xy[1])
elif pos.upper() == "COMPASS":
pyautogui.click(xy[0], xy[1])
elif pos.upper() == "CLEAR_INVEN":
pyautogui.click(xy[0], xy[1])
尽管我不确定为什么您要循环三次相同的输入...