Как вы реализуете таймер LiveCode?
Я делаю парную игру. Пользователи могут нажимать и подбирать пары, что отлично работает. Тем не менее, я хотел бы добавить таймер. Я не уверен, как это сделать.
У меня уже есть кнопка "Пуск", которая используется для запуска и сброса игры. Я добавил поле "счетчик", которое я буду использовать для отображения времени. Я просто не уверен, как заставить работать таймер, не блокируя игру.
2 ответа
Учитывая, что это игра, я ожидаю, что вы захотите отобразить секунды и завершить игру через определенный промежуток времени.
LiveCode имеет отличный синтаксис для этого. Команда "send" позволяет отправлять сообщения в назначенное время. Например:
send "handlerName" to target in 1 second
Таким образом, применение этого принципа позволяет нам создавать таймеры в пару строк сценария.
local sSeconds
on countSeconds
add 1 to sSeconds
send "timerIncrease" to me in 1 second
end countSeconds
Этот пример будет считаться вечно, поэтому может быть не очень полезным!
Вы описали простую игру, поэтому я хотел бы представить, что вы хотите отсчитывать время, скажем, от 60 секунд до 0. Когда вы нажмете 0, скажите пользователю, что его время истекло. В вашей кнопке вы можете попробовать следующий скрипт
local sGameSeconds
local sTimerRunning
on mouseUp
if the label of me is "start" then
set the label of me to "reset"
put true into sTimerRunning
put 60 into sGameSeconds
send "timerRun" to me in 1 second
else
set the label of me to "start"
put false into sTimerRunning
put 60 into field "counter"
end if
end mouseUp
on timerRun
if sTimerRunning is true then
subtract 1 from sGameSeconds
if sGameSeconds < 1 then
put 0 into field "counter"
put false into sTimerRunning
set the label of button "start" to "start"
timerFinished
else
put sGameSeconds into field "counter"
send "timerRun" to me in 1 second
end if
end if
end timerRun
on timerFinished
answer "Time Up!"
end timerFinished
Не совсем понятно, о чем вы спрашиваете. Вы пишете, что хотите таймер, но не говорите, для чего хотите его использовать. Также вы не говорите, хотите ли вы, чтобы этот таймер действительно отображал время, или если вы просто хотите, чтобы что-то произошло через определенное время.
Вот простой способ отображения времени:
on showTime
put the long time into fld "Time"
send "showTime" to me in 100 milliseconds
end showTime
При обновлении времени каждые 100 миллисекунд отображаемое время никогда не прекращается более чем на 1/10 секунды.
Вот эффективный способ отображения таймера, который показывает только часы и минуты. Он отправляет сообщение showTime как раз вовремя и использует минимальную вычислительную мощность:
on mouseUp
if showTime is in the pendingMessages then
put the pendingMessages into myMsgs
filter myMsgs with "*showTime*"
repeat for each line myMsg in myMsgs
cancel item 1 of myMsg
end repeat
else
showTime
end if
end mouseUp
on showTime
set the itemDel to colon
put the system time into myTime
put myTime into fld 1
put item 2 of myTime into myMinutes
if myMinutes is 59 then
add 1 to item 1 of myTime
if item 1 of myTime >= 24 then
put 0 into item 1 of myTime
end if
put "00" into item 2 of myTime
else
add 1 to item 2 of myTime
end if
convert myTime to seconds
put myTime - the seconds into myTime
send "showTime" to me in myTime seconds
end showTime
Вы можете запустить таймер, нажав на кнопку, содержащую обработчик mouseUp, и можете остановить его, нажав эту же кнопку еще раз.
Если это не то, что вам нужно, пожалуйста, объясните больше.