Сценарий Lua повторяется при ключевом событии без остановки

#lua #logitech-gaming-software

Вопрос:

Простая проблема, но мне нелегко ее решить :

У меня есть цикл и переменные, которые изменяются с помощью функции onEvent(событие, arg)

Но, находясь в цикле, он не обнаруживает изменений, например

 local cancel_action = false

function OnEvent(event, arg)
  if (event == "MOUSE_BUTTON_PRESSED" and arg == 2) then
    cancel_action = not cancel_action
    OutputLogMessage("DETECT  cancel_action :")
    OutputLogMessage(tostring(cancel_action))
  end

  if (event == "MOUSE_BUTTON_PRESSED" and arg == 3) then
    test()
  end
end

function test()
  count_ = 0
  repeat
     count_ = count_   1
     OutputLogMessage("cancel_action ?")
     OutputLogMessage(tostring(cancel_action))
     if ( cancel_action ) then
       OutputLogMessage("do something and stop")
       cancel_action = not cancel_action
       break
     else
        OutputLogMessage("do something else and loop again")
     end
  until count_ > 10
end
 

Здесь изменение cancel_action обнаружено и хорошо работает в функции onEvent, но никогда не обнаруживается во время цикла в тестовой функции.

Итак, подводя итог, я хочу использовать переменные, которые содержат состояния, но эти состояния неправильно обновляются в моей тестовой функции.

Что я сделал не так ? Можно ли обнаружить изменение переменной во время цикла ? Событие, по-видимому, запускается только после завершения цикла

Ответ №1:

Вы не обновляетесь cancel_action в своем цикле, и пока ваш код занят выполнением цикла, никакие дальнейшие события не обрабатываются. Так как же cancel_action предполагается изменить его значение?

Используйте IsMouseButtonPressed(2) для завершения цикла.