(Lua)如何在三个if语句中运行时每次递增一个变量?

我正在为学校构建一个移动和感应机器人。CoppeliaSim使用Lua进行编写。基本上,每当机器人的前向感应器撞到东西时,就会运行三个if语句之一。我想要计算任何这些if语句运行的次数,并且一旦计数达到一定量(例如20),我将运行其他事物,它将做同样的事情(找到碰撞,加入计数,达到数量,然后切换回第一个)。

i = 0

result = sim.readProximitySensor(noseSensor) --读取接近传感器
--如果我们检测到了,我们设置后向模式:
if (result>0) then backUntilTime=sim.getSimulationTime()+3
   print("Collision Detected")
   i=i+1
   print(i)
end

result = sim.readProximitySensor(noseSensor0) --读取接近传感器
--如果我们检测到了,我们设置后向模式:
if (result>0) then backUntilTime=sim.getSimulationTime()+3
   print("Collision Detected")
   i=i+1
   print(i)
end

result = sim.readProximitySensor(noseSensor1) --读取接近传感器
--如果我们检测到了,我们设置后向模式:
if (result>0) then backUntilTime=sim.getSimulationTime()+3
   print("Collision Detected")
   i=i+1
   print(i)
end

上面是函数的开头和三个if语句之一。我只是打印出来看看它是否真的增加了。它正在打印,但它没有递增(只是一遍又一遍地打印1)。这个机器人有3个传感器(每个传感器都有一个if语句),它会在第一次碰撞时加1,并忽略其他碰撞,即使它来自同一个传感器。我觉得我的问题只是一个简单的Lua语法问题,我不知道如何正确修复。

如果这个小片段不足以回答这个问题,我很乐意提供更多代码。

点赞
用户7652095
用户7652095

假设你有一个循环函数,例如 sysCall_actuation,它在每次模拟步骤中执行。如 Joseph Sible-Reinstate Monica 所述,每次执行模拟步骤时你都会将变量 i 重置为零。为了实现你的目标,你需要在函数外部将变量设置为 0。有两种适当的方法可以实现:

  1. 在文件的开头(或在定义使用你的变量的任何函数之前,例如在定义 sysCall_actuation 之前)定义变量。
-- 文件开头。
local i = 0

..

function sysCall_actuation()
    ..
    i = i + 1
    ..
end
  1. sysCall_init 函数中定义你的变量,这是在 CoppeliaSim 中使用的适当方法。
    function sysCall_init()
        i = 0
        ..
    end

最后,你可以在 sysCall_actuation 函数中使用基本的比较运算来使用变量:

function sysCall_actuation()
    ..
    if i > 20 then
        i = 0 -- 重置 'i',以便此函数不会一遍又一遍地运行。
        -- 在此处执行一些操作。
    ..
end

顺便提一下,尽可能使用本地变量,以保持内存清洁并避免出现模糊的变量。

2020-05-10 05:00:37