Skip to content

Latest commit

 

History

History
100 lines (81 loc) · 3.32 KB

0.1-开发思路.md

File metadata and controls

100 lines (81 loc) · 3.32 KB

开发思路

MaaFramework 支持完全通过 Json 低代码编程(Pipeline Json),同时也提供了 接口 以供开发者自行集成。
亦可将两者结合,将低代码作为一种 “封装” 进行调用。
下面介绍几种常用的集成方式:

完全依赖 Json 低代码编程(使用 MaaPiCli.exe)

简单快捷,但不够灵活,推荐 MaaFramework 初学者及编程小白使用。
我们为此方式提供了 🎞️视频教程⭐项目模板。以下是一个例子:

// Json 不支持注释,此处为伪代码,仅供参考思路,无法直接运行
{
    "识别并点击开始按钮": {
        "recognition": "OCR",           // 文字识别
        "expected": "开始",             // 要识别的字
        "action": "Click",              // 动作:点击
        "next": [
            "识别并点击确定图标",
        ]
    },
    "识别并点击确认图标": {
        "recognition": "TemplateMatch", // 图片模板匹配
        "template": "确认.png",         // 图片文件名
        "action": "Click"
    }
}

使用 Json 低代码编程,但对复杂任务使用自定义逻辑

通过接口启动 CLI,同时注册部分自定义任务。该方法可从 1 中无缝切换。以下是一个例子:

{
    "识别并点击确认图标": {
        "next": [
            "我的自定义任务"
        ]
    },
    "我的自定义任务": {
        "recognition": "Custom",
        "custom_recognition": "MyReco",
        "action": "Custom",
        "custom_action": "MyAct"
    }
}
# 此处为伪代码,仅供参考思路,无法直接运行
def main():
    # 注册自定义识别器
    maafw.Toolkit.register_custom_recognition("MyReco", MyRecognition())

    # 注册自定义动作
    maafw.Toolkit.register_custom_action("MyAct", MyAction())

    # 启动 MaaPiCli
    maafw.Toolkit.run_pi_cli("C:/MaaXXX/resource", "C:/MaaXXX/cache")

class MyRecognition(CustomRecognition):
    def analyze(context, ...):
        # 获取图片,然后进行自己的图像操作
        image = context.tasker.controller.cached_image
        # 返回图像分析结果
        return AnalyzeResult(box=(10, 10, 100, 100))

class MyAction(CustomAction):
    def run(context, ...):
        # 进行点击
        context.controller.post_click(100, 10).wait()
        # 重写接下来要执行的任务
        context.override_next(task_name, ["TaskA", "TaskB"])

自行编写代码

可以将低代码作为一种“封装”进行调用,亦可注册自定义回调使用

# 此处为伪代码,仅供参考思路,无法直接运行
# "识别并点击开始按钮", "识别并点击确认图标" 等均为 Json 中的逻辑
def main():
    detail = tasker.post_pipeline("识别并点击开始按钮").wait().get()

    if detail.completed:
        tasker.controller.post_click(100, 100).wait()

    else:
        image = tasker.controller.cached_image
        save_to_file(image)

        my_act = MyAction()
        tasker.resource.register_custom_action("MyAction", MyAction())
        tasker.post_pipeline("识别并点击确认图标").wait()

    image: np.ndarray = tasker.controller.post_screencap().wait().get()