Lua 带错误检测的循环无法正常工作
Lua Loop with error detection not working correctly
我在一两周前编写了一个简单的机器人程序脚本,并且随着我的理解的扩展,我一直在用新知识构建它。
local B = 1 --Boss check 1 = true, 2 = false
repeat
function bossCheck()
local rgb1 = getColor(x,y)
if rgb1 == (rgb) then
touchDown(x,y)
usleep(time)
touchUp(x,y)
end
local D = 1 --Delay, corrective action when script is out of sync with loading times
repeat
if rgb1 ~= (rgb) then
D = D + 1
usleep(time)
end
until D == 5
end
if D == 5 then
B = B + 1
end
until B == 2
if B == 2 then
alert("No Boss")
end
这实际上是循环工作的,直到我添加了更正检查延迟。如果 function bossCheck()
失败,那么在我看来它应该 repeat
。我假设这是可行的是我错了,还是我放错了一些循环语句?
在我用 local D = 1 --for delay
实现的这个新代码之前,我会尝试触摸我的 IOS 屏幕两次,它会 return not true
结果然后我的循环会结束。但是截至目前,我 运行 我的脚本没有任何反应,并且脚本 运行 似乎不确定。
这很令人困惑。我不希望在这里包含逐字逐句的行,但有点提示我正确的方向。
编辑 - 示例
'函数bossCheck()
如果 (getColor(x,y) == "color1") 那么
return 真;
结尾
return 错误;
结束
上司函数()
触摸(x,y)
睡着了(时间)
return 真;
结束
function fightBoss()
触摸(x2,y2)
睡着了(时间)
return 真;
结束
函数bossReturn()
触摸 (x3,y3)
睡着了(时间)
return 真;
结束
函数bossLoop()
while (bossCheck) 做
onBoss();
打老大();
老板返回();
结尾
结束
重复
老板循环();
直到 (bossCheck == false)
if (bossCheck == false) 那么
警报("Boss Loop End")
结束
'
好的,repeat until
一遍又一遍地执行给定的脚本,直到它到达一条语句。
您的脚本,将 bossCheck 重新定义为函数并检查 D 是否等于 5(D 为 nil)。
你不会在任何地方调用 bossCheck,因此 B 仍然是 1。
这个脚本应该可以工作。
local noBoss = false;
function bossCheck()
noBoss = false;
local rgb1 = getColor(x,y);
if (rgb1 == rgb) then
touchDown(x,y)
usleep(time)
touchUp(x,y)
return -- if it's true, stop the function here;
end
noBoss = true;
usleep(time * 5); -- no point delaying application action 5 times, when we call just multiply the sleep amount by 5;
end
repeat
bossCheck();
until noBoss;
if (noBoss) then
alert("No Boss");
end
编辑:
我如何按顺序调用多个函数的示例
function bossCheck()
if (getColor(x,y) == rgb) -- instead doing rgb1= ..
touchDown(x,y)
usleep(time)
touchUp(x,y)
return true;
end
return false;
end
while true do
if (not bossCheck()) then
alert("No Boss");
break; -- break out of the loop
end
if ((function () return true)()) then
alert("This local function return true.. so alert message is shown\nYou can do the same with any other functions");
end
end
根据您的示例,您可以这样做
function bossCheck()
if (getColor(x,y) == rgb) -- instead doing rgb1= ..
return true;
end
return false;
end
while true do
if (bossCheck()) then
touch(x,y)
usleep(time)
touch(x2,y2)
usleep(time)
touch(x3,y3)
usleep(time)
else
alert("No Boss");
break; -- break out of the loop
end
end
我在一两周前编写了一个简单的机器人程序脚本,并且随着我的理解的扩展,我一直在用新知识构建它。
local B = 1 --Boss check 1 = true, 2 = false
repeat
function bossCheck()
local rgb1 = getColor(x,y)
if rgb1 == (rgb) then
touchDown(x,y)
usleep(time)
touchUp(x,y)
end
local D = 1 --Delay, corrective action when script is out of sync with loading times
repeat
if rgb1 ~= (rgb) then
D = D + 1
usleep(time)
end
until D == 5
end
if D == 5 then
B = B + 1
end
until B == 2
if B == 2 then
alert("No Boss")
end
这实际上是循环工作的,直到我添加了更正检查延迟。如果 function bossCheck()
失败,那么在我看来它应该 repeat
。我假设这是可行的是我错了,还是我放错了一些循环语句?
在我用 local D = 1 --for delay
实现的这个新代码之前,我会尝试触摸我的 IOS 屏幕两次,它会 return not true
结果然后我的循环会结束。但是截至目前,我 运行 我的脚本没有任何反应,并且脚本 运行 似乎不确定。
这很令人困惑。我不希望在这里包含逐字逐句的行,但有点提示我正确的方向。
编辑 - 示例
'函数bossCheck() 如果 (getColor(x,y) == "color1") 那么 return 真; 结尾 return 错误; 结束
上司函数() 触摸(x,y) 睡着了(时间) return 真; 结束
function fightBoss() 触摸(x2,y2) 睡着了(时间) return 真; 结束
函数bossReturn() 触摸 (x3,y3) 睡着了(时间) return 真; 结束
函数bossLoop() while (bossCheck) 做 onBoss(); 打老大(); 老板返回(); 结尾 结束
重复 老板循环(); 直到 (bossCheck == false)
if (bossCheck == false) 那么 警报("Boss Loop End") 结束
'
好的,repeat until
一遍又一遍地执行给定的脚本,直到它到达一条语句。
您的脚本,将 bossCheck 重新定义为函数并检查 D 是否等于 5(D 为 nil)。
你不会在任何地方调用 bossCheck,因此 B 仍然是 1。
这个脚本应该可以工作。
local noBoss = false;
function bossCheck()
noBoss = false;
local rgb1 = getColor(x,y);
if (rgb1 == rgb) then
touchDown(x,y)
usleep(time)
touchUp(x,y)
return -- if it's true, stop the function here;
end
noBoss = true;
usleep(time * 5); -- no point delaying application action 5 times, when we call just multiply the sleep amount by 5;
end
repeat
bossCheck();
until noBoss;
if (noBoss) then
alert("No Boss");
end
编辑:
我如何按顺序调用多个函数的示例
function bossCheck()
if (getColor(x,y) == rgb) -- instead doing rgb1= ..
touchDown(x,y)
usleep(time)
touchUp(x,y)
return true;
end
return false;
end
while true do
if (not bossCheck()) then
alert("No Boss");
break; -- break out of the loop
end
if ((function () return true)()) then
alert("This local function return true.. so alert message is shown\nYou can do the same with any other functions");
end
end
根据您的示例,您可以这样做
function bossCheck()
if (getColor(x,y) == rgb) -- instead doing rgb1= ..
return true;
end
return false;
end
while true do
if (bossCheck()) then
touch(x,y)
usleep(time)
touch(x2,y2)
usleep(time)
touch(x3,y3)
usleep(time)
else
alert("No Boss");
break; -- break out of the loop
end
end