Как вы реализуете таймер 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, и можете остановить его, нажав эту же кнопку еще раз.

Если это не то, что вам нужно, пожалуйста, объясните больше.

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