Как реализовать секундомер в Lua?

Как бы вы сделали секундомер в Луа?

2 ответа

Вот очень простой секундомер, он запускается / сбрасывается, когда пользователь нажимает на экран. В этом примере показаны прошедшие минуты и секунды. Если вы хотите считать миллисекунды, вы можете использовать ElapsedTime вместо os.time() и вычислите количество часов, минут и т. д. самостоятельно вместо os.date(), Кроме того, у меня нет iPad, поэтому может быть ошибка.

function setup()
   fontSize(20)
   background(100, 120, 160)
   fill(255)
   toggle_timer()
end

function toggle_timer()
  timer_on = not timer_on
  if timer_on then
    start = os.time()
  end
end

function draw()
   if timer_on then
      text(os.date("%M:%S", os.difftime(os.time(), start)),
        WIDTH / 2, HEIGHT / 2)
   end
end

function touched(touch)
   if touch.state == BEGAN then
      toggle_timer()
   end
end

Боюсь, я совсем не знаю Codea, и вы, скорее всего, обнаружите, что в этой библиотеке есть функции для gettime а также sleep, Однако в качестве чистой опции Lua (при условии, что вы используете luasocket), следующий код реализует пример, который может быть построен.

socket = require('socket')


-- Define the stop watch
local start_time

function start()
    -- Start the stop watch
    start_time = socket.gettime() - 3800
end

function seconds_ellapsed()
    -- Return the number of seconds since the stop watch was started
    return socket.gettime() - start_time
end


-- As an example run the stop watch indefinately
start()

while true do

    -- Get the time ellapsed and convert it to hours, minutes and seconds
    ellapsed = seconds_ellapsed()
    hours = math.floor(ellapsed / 3600)
    minutes = math.floor((ellapsed - (hours * 3600)) / 60)
    seconds = math.floor((ellapsed - (hours * 3600) - (minutes * 60)))

    -- Print the time ellapsed to the command line
    print(hours .. 'h', minutes .. 'm', seconds .. 's')

    -- Wait a second between each update
    socket.sleep(1)

end

Вы можете посмотреть, чтобы использовать os.clock также, но Lua не имеет встроенного механизма для установки потока в спящий режим на некоторое время (что требовалось для моего примера, поэтому я решил использовать luasocket). Здесь есть полезная статья о возможных подходах к реализации сна в lua: http://lua-users.org/wiki/SleepFunction

Другие вопросы по тегам