常见问题

查询模拟器各类问题的解决方案

请输入关键词查找相关问题

MuMu 脚本编辑器命令说明

开发者功能

本文档用于说明 MuMu 脚本编辑器支持的全部命令、参数和常见写法。

一、阅读说明

  • 命令和参数使用英文半角字符。
  • 坐标原点位于屏幕左上角,X 向右增大,Y 向下增大。
  • 时间参数统一使用毫秒,1000 毫秒等于 1 秒。
  • 语法中的方括号表示该参数可不填。例如 touchup([id]) 表示 id 可不填,实际输入时不需要输入方括号。
  • 文本和应用包名需要使用英文双引号,例如 inputtext("hello")
  • ifforwhilefunctiononkeyup 都是结构命令,必须使用 end 结束。
  • -- 开头的行是注释,不会执行。

二、命令快速索引

分类 命令 用途
触摸 tap(x,y) 点击坐标
触摸 swipe(x1,y1,x2,y2[,time]) 从起点滑动到终点
触摸 touch(x,y,time) 长按坐标
触摸 touchdown(x,y[,id]) 按下触点但不松开
触摸 touchmove(x,y[,id[,time]]) 移动已经按下的触点
触摸 touchup([id]) 松开触点
触摸 movezoomin(x1,y1,x2,y2[,time]) 双指放大
触摸 movezoomout(x1,y1,x2,y2[,time]) 双指缩小
控制 delay(ms) 等待指定时间
控制 for i=1,n do ... end 循环执行 N 次
控制 while condition do ... end 条件成立时持续循环
控制 if condition then ... end 条件判断
控制 break 跳出当前循环
控制 local name = value 定义变量
控制 function name() ... end 定义函数
控制 name() 调用已经定义的函数
控制 return [value] 结束函数并可选择返回值
控制 endscript() 立即停止脚本
设备 inputtext("text") 向当前输入框输入文本
设备 enterstaring() 锁定并隐藏鼠标
设备 exitstaring() 解锁并显示鼠标
设备 getmouseposition() 获取当前鼠标坐标
设备 isrunning("package") 检测应用是否正在运行
设备 setscreenscale(width,height[,scale]) 按基准分辨率换算坐标
事件 onkeyup ... end 宏按键松开时执行命令

三、触摸命令

1. tap(x,y):点击

在指定坐标短按一次。

参数 是否必填 说明
x 必填 点击位置的 X 坐标
y 必填 点击位置的 Y 坐标
tap(500,300)

2. swipe(x1,y1,x2,y2[,time]):滑动

从起点坐标滑动到终点坐标。

参数 是否必填 说明
x1 必填 起点 X 坐标
y1 必填 起点 Y 坐标
x2 必填 终点 X 坐标
y2 必填 终点 Y 坐标
time 可不填 滑动耗时,默认 100 毫秒
swipe(200,700,200,300,500)

3. touch(x,y,time):长按

在指定坐标按住一段时间后松开。

参数 是否必填 说明
x 必填 长按位置的 X 坐标
y 必填 长按位置的 Y 坐标
time 必填 按住时长,单位为毫秒
touch(500,300,2000)

4. touchdown(x,y[,id]):按下触点

在指定坐标按下触点并保持,不会自动松开。后续必须配合 touchmovetouchup 使用。

参数 是否必填 说明
x 必填 按下位置的 X 坐标
y 必填 按下位置的 Y 坐标
id 可不填 触点 ID,默认 0
touchdown(500,300)
delay(1000)
touchup()

5. touchmove(x,y[,id[,time]]):移动触点

把已经按下的触点移动到新坐标。未先调用 touchdown 时,无法形成完整的触摸操作。

参数 是否必填 说明
x 必填 目标位置的 X 坐标
y 必填 目标位置的 Y 坐标
id 可不填 触点 ID,默认 0
time 可不填 移动耗时,默认 100 毫秒

需要填写 time 时,应同时保留 id 的参数位置。

touchdown(300,500,0)
touchmove(700,500,0,500)
touchup(0)

6. touchup([id]):松开触点

松开指定触点。

参数 是否必填 说明
id 可不填 触点 ID,默认 0,需要与前面的 touchdown 保持一致

下面的示例使用两个触点完成向外拉伸动作:

touchdown(400,400,1)
touchdown(600,400,2)
touchmove(300,400,1,300)
touchmove(700,400,2,300)
touchup(1)
touchup(2)

7. movezoomin(x1,y1,x2,y2[,time]):双指放大

以两个坐标为起点,同时向两端滑动,模拟双指放大。

参数 是否必填 说明
x1 必填 第一个触点的 X 坐标
y1 必填 第一个触点的 Y 坐标
x2 必填 第二个触点的 X 坐标
y2 必填 第二个触点的 Y 坐标
time 可不填 动作耗时,默认 50 毫秒
movezoomin(500,500,700,500,300)

8. movezoomout(x1,y1,x2,y2[,time]):双指缩小

以两个坐标为起点,同时向中间滑动,模拟双指缩小。

参数 是否必填 说明
x1 必填 第一个触点的 X 坐标
y1 必填 第一个触点的 Y 坐标
x2 必填 第二个触点的 X 坐标
y2 必填 第二个触点的 Y 坐标
time 可不填 动作耗时,默认 50 毫秒
movezoomout(400,500,800,500,300)

四、控制命令

1. delay(ms):等待

暂停指定时间后继续执行下一条命令。编辑器参数留空时使用默认值 1000 毫秒。

参数 是否必填 说明
ms 必填 等待时长,单位为毫秒
delay(1000)

2. for i=1,n do ... end:循环 N 次

按照固定次数重复执行结构内的命令。编辑器会自动生成 i=1doend

参数 是否必填 说明
n 必填 循环次数
for i=1,5 do
    tap(500,300)
    delay(1000)
end

3. while condition do ... end:条件循环

条件成立时持续执行结构内的命令。必须确保条件最终会失效,或者在循环内使用 break,否则可能形成无限循环。

参数 是否必填 说明
condition 必填 返回真或假的条件表达式
while isrunning("com.example.game") do
    tap(500,300)
    delay(1000)
end

4. if condition then ... else ... end:条件判断

条件成立时执行 then 后面的命令,否则执行 else 后面的命令。没有备用分支时可以删除 else

参数 是否必填 说明
condition 必填 返回真或假的条件表达式
if isrunning("com.example.game") then
    tap(500,300)
else
    endscript()
end

需要连续判断多个条件时,可以使用 elseif

if score > 100 then
    tap(500,300)
elseif score > 50 then
    tap(400,300)
else
    tap(300,300)
end

5. break:跳出循环

立即结束当前所在的 forwhile 循环,并从循环后的下一条命令继续执行。break 不能单独放在循环外。

while true do
    if isrunning("com.example.game") then
        break
    end
    delay(1000)
end

6. local name = value:定义变量

给一个值起名字,便于后续重复使用。

参数 是否必填 说明
name 必填 变量名,建议使用英文字母、数字和下划线,且不要以数字开头
value 必填 变量的初始值
local waitTime = 1000
delay(waitTime)

7. function name() ... end:定义函数

把一组操作封装成可以重复调用的函数。当前编辑器主要支持无参数函数,函数需要先定义再调用。

参数 是否必填 说明
name 必填 函数名,不能与已有命令重名
function collectReward()
    tap(500,300)
    delay(1000)
end

collectReward()

8. name():调用函数(编辑器命令 call

执行已经定义的函数。左侧命令面板中的命令名为 call,插入代码后会自动转换成实际函数名加括号的形式。中文模式的“调用函数”参数面板会列出当前脚本中的函数名。

function closePopup()
    tap(900,100)
end

closePopup()

调用的函数不存在时,编辑器会提示“调用的函数不存在”。

9. return [value]:从函数返回

立即结束当前函数。可以返回一个值,也可以不返回值。return 只能写在函数内部。

参数 是否必填 说明
value 可不填 需要返回的值;留空时只结束函数
function checkApp()
    if isrunning("com.example.game") then
        return true
    end
    return false
end

10. endscript():停止运行

立即结束整个脚本,不再执行后续命令。通常用于条件不满足或发生异常时提前退出。

if isrunning("com.example.game") then
    tap(500,300)
else
    endscript()
end

五、设备命令

1. inputtext("text"):输入文本

向当前已经获得焦点的输入框输入文字。使用前通常需要先点击输入框,并等待输入框获得焦点。

参数 是否必填 说明
text 必填 需要输入的文本,使用英文双引号包裹
tap(500,300)
delay(300)
inputtext("hello")

2. enterstaring():锁定并隐藏鼠标

进入鼠标锁定状态并隐藏鼠标。需要在适当时机调用 exitstaring() 恢复。

enterstaring()

3. exitstaring():解锁并显示鼠标

退出鼠标锁定状态并恢复显示鼠标。

exitstaring()

4. getmouseposition():获取鼠标位置

读取当前鼠标坐标。执行后,X 坐标保存在 mousex,Y 坐标保存在 mousey

getmouseposition()
tap(mousex,mousey)

5. isrunning("package"):检测应用是否运行

检测指定包名的应用是否正在运行,并返回真或假。该命令通常放在 ifwhile 的条件中。

参数 是否必填 说明
package 必填 应用包名,使用英文双引号包裹
if isrunning("com.example.game") then
    tap(500,300)
end

6. setscreenscale(width,height[,scale]):适配分辨率

把后续坐标按照制作脚本时的基准分辨率等比换算,适合让同一脚本在不同分辨率的设备上使用。

参数 是否必填 说明
width 必填 制作脚本时的基准宽度
height 必填 制作脚本时的基准高度
scale 可不填 是否对命令返回的坐标进行反向换算,默认 1
setscreenscale(1920,1080,1)
tap(960,540)

六、事件命令

onkeyup ... end:宏按键弹起时

当宏按键松开时执行结构内的命令,仅在宏模式中可用。该命令不接收键名参数,具体按键由编辑器外部的宏绑定决定。

onkeyup
    exitstaring()
end

一个宏脚本可以同时包含按下时执行的普通命令和松开时执行的 onkeyup 结构:

enterstaring()
touchdown(500,300)

onkeyup
    touchup()
    exitstaring()
end

七、结构关键字

else:否则

用于 if 结构。当前面的条件不成立时,执行 else 后面的命令。

elseif condition then:否则如果

用于在同一个 if 结构中继续判断其他条件。

end:结束结构

结束最近一个尚未结束的 ifforwhilefunctiononkeyup 结构。缺少 end 时,编辑器会在对应的结构开头显示错误提示。

八、常见组合示例

点击后等待

tap(500,300)
delay(1000)
tap(620,460)

重复点击 5 次

for i=1,5 do
    tap(500,300)
    delay(1000)
end

应用运行时才执行

if isrunning("com.example.game") then
    tap(500,300)
else
    endscript()
end

输入文本

tap(500,300)
delay(300)
inputtext("hello")

九、常见错误提示

提示 原因 处理方式
参数不完整 必填参数为空 补全该命令的必填参数
缺少结束语句 end 结构命令没有对应的结尾 在结构末尾添加 end
缺少对应的开头语句 单独保留了 endelseelseif 恢复对应的结构开头,或删除多余语句
该命令需要放在循环内 break 写在了循环外 break 移入 forwhile
该命令需要放在函数内 return 写在了函数外 return 移入 function
调用的函数不存在 调用了没有定义的函数 检查函数名,并确保函数已经定义
无意义代码 当前内容无法识别为支持的命令 检查拼写、括号和参数格式

十、使用建议

  • 每次界面发生变化后增加适当的 delay,避免下一条命令执行过早。
  • touchdown 必须与对应触点 ID 的 touchup 配对。
  • while 循环必须设计明确的退出条件,避免无限循环。
  • 函数应先定义再调用,并避免使用与内置命令相同的名称。
  • 保存前检查编辑器中是否仍有红色错误提示。

文章已到底

关键词:
暂无搜索结果

暂时未能为您匹配到问题,请换个关键词试试吧~

你还可以:
1、联系在线客服反馈问题:点击咨询
2、登记问卷反馈问题:http://163.fm/8Xs3d3Mx
加载中...
Mu酱企业微信

长按识别二维码添加Mu酱