Как реализовать секундомер в 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