阅读以下代码:
import os
from autowsgr.fight.event.event_2024_0930 import EventFightPlan20240930
from autowsgr.scripts.main import start_script
timer = start_script(f"{os.path.dirname(os.path.abspath(__file__))}/user_settings.yaml") # 注册一个 timer 来管理模拟器和游戏
plan = EventFightPlan20240930(
timer, plan_path=r"C:\\Users\\huany\\Desktop\\Projects\\Auto-WSGR-dev\\Auto-WSGR\\tests\\plans\\event\\20240930\\E10ADF.yaml", fleet_id=4
) # 注册一个 plan, 功能是在 10 周年活动图 E10 的 ADF 三连夜战点练级
plan.run_for_times(500) # 执行 500 次
通过 start_script
函数,用户获取了一个 Timer
对象,这个对象用于操作模拟器,每次运行程序时只能注册一个 Timer
对象。
所有的 FightPlan 对象在注册(实例化)时均需要将唯一的全局 Timer
对象作为参数传入。(例子省略)
所有的游戏操作函数都需要唯一的全局 Timer
对象作为参数传入:
def SetAutoSupply(timer: Timer, type=1):
"""
设置自动补给
"""
timer.update_screen()
NowType = int(timer.check_pixel((48, 508), (224, 135, 35)))
if NowType != type:
timer.click(44, 503, delay=0.33)
Timer
对象提供了操作游戏所必须的所有底层接口,下面将逐步介绍。
现已加入的游戏 UI 页面(不带后缀名和后缀数字的文件名就是 target
的参数)。
这是一个偏上层的功能,主要有以下几个方法:
def wait_pages(self, names, timeout=10, gap=0.1, after_wait=0.1):
# 等待指示的界面中的任何一个出现。
# names 是一个列表, 指示哪些界面是在被等待的界面。
# 没有返回值。
def goto_game_page(self, target="main", extra_check=False):
# 前往 target 指示的游戏页面。
# target 是一个字符串。
def ConfirmOperation(self, must_confirm=False, delay=0.5, confidence=0.9, timeout=0):
# 点击弹出的确定按钮
def go_main_page(self, QuitOperationTime=0, List=[], ExList=[]):
# 从任意界面(包括未加入的游戏 UI 页面)返回主页面。
建立在原子操作上的进一步处理图像的函数,主要有以下几个方法:
继承自 AndroidController
类,主要有以下几个方法:
def relative_click(self, x, y, times=1, delay=0.5, enable_subprocess=False):
# 点击模拟器相对坐标 (x, y) ([0, 1], [0, 1])
def text(self, t):
"""输入文本
需要焦点在输入框时才能输入
"""
def relative_swipe(self, x1, y1, x2, y2, duration=0.5, delay=0.5, *args, **kwargs):
"""匀速滑动模拟器相对坐标 (x1, y1) 到 (x2, y2).
Args:
x1, y1, x2, y2: 相对坐标
duration: 滑动总时间
delay: 滑动后延时(单位为秒)
"""
def relative_long_tap(self, x, y, duration=1, delay=0.5, *args, **kwargs):
"""长按相对坐标 (x, y)
Args:
x, y: 相对坐标
duration (int, optional): 长按时间(秒). Defaults to 1.
delay (float, optional): 操作后等待时间(秒). Defaults to 0.5.
"""
def get_screen(self, resolution=(1280, 720), need_screen_shot=True):
"""获取屏幕图片
return (numpy.ndarray): 宽x长 array[720][1280]
"""
if need_screen_shot:
self.update_screen()
return cv2.resize(self.screen, resolution)