Lua Loop错误检测无法正常工作

时间:2015-02-05 02:35:44

标签: loops lua

我在一两个星期前编写了一个简单的机器人程序,并且在我扩展理解的基础上,用新的知识构建了它。

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屏幕上触摸两次,它将返回not true结果,然后我的循环将结束。但截至目前,我运行我的脚本并没有任何反应,看起来脚本运行得无限。

这非常令人困惑。我不期待这里应该包括的逐字线,但有点暗示我正确的方向。

编辑 - 示例

'功能bossCheck()    if(getColor(x,y)==" color1")然后       返回true;    结束    返回false; 端

function onBoss()    触摸(X,Y)    usleep(时间)    返回true; 端

function fightBoss()    触摸(X2,Y2)    usleep(时间)    返回true; 端

函数bossReturn()    触摸(x3,y3)    usleep(时间)    返回true; 端

function bossLoop()    而(bossCheck)呢       onBoss();       fightBoss();       bossReturn();    结束 端

重复    bossLoop(); 直到(bossCheck == false)

if(bossCheck == false)然后    警报(" Boss Loop End") 端

'

1 个答案:

答案 0 :(得分:0)

好的,repeat until一遍又一遍地执行给定的脚本,直到它到达一个语句。

您的脚本,将bossCheck重新定义为函数并检查D是否等于5(D为零)。

你不会在任何地方调用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