Перейти к содержимому
  • 0
_bongo_

Кнопка

Вопрос

моя подруга сделала вот такой код:
 

Цитата

local component = require("component")
local gpu = component.gpu
local rs = component.redstone
local e = require('event').pull
local W, H = gpu.getResolution()
local b_color, f_color = gpu.getBackground(), gpu.getForeground()
 
local tButtons = {
  {
  visible = false,
  X = 5,
  Y = 5,
  W = 6,
  H = 3,
  color = 0x3a3636,
  textColor = 0x000033,
  text = "start"
  },
  {
  visible = false,
  X = W-5,
  Y = H-35,
  W = 1,
  H = 1,
  color = 0x001111,
  textColor = 0x9c0d06,
  text = "X"
 }
}
 
 
local function drawButton(n) 
  gpu.setBackground(tButtons[n].color)
  gpu.setForeground(tButtons[n].textColor)
  gpu.fill(tButtons[n].X, tButtons[n].Y, tButtons[n].W, tButtons[n].H, ' ')
  gpu.set(tButtons[n].X+(tButtons[n].W/2)-(#tButtons[n].text/2), tButtons[n].Y+(tButtons[n].H/2), tButtons[n].text)
end
 
local function refresh(n) 
    gpu.setBackground(b_color) 
    gpu.fill(tButtons[n].X, tButtons[n].Y, tButtons[n].W, tButtons[n].H, ' ') 
    drawButton(n)
  
end
 
gpu.fill(1, 1, W, H, ' ')
 
for i = 1, #tButtons do
  refresh(i)
end
 
while true do
  local tEvent = {e('touch')} 
  for i=1, #tButtons do
 
      if tEvent[3] >= tButtons.X and tEvent[3] <= tButtons.X+tButtons.W and tEvent[4] >= tButtons.Y and tEvent[4] <= tButtons.Y+tButtons.H then
   if tButtons.text == "start" then
    os.sleep(120)
    rs.setOutput(1,15)
    tButtons.text = "stop"
    refresh(i)
    goto continue
    end
 
  if tButtons.text == "stop" then
     tButtons.text = "start"
     rs.setOutput(1,0)
     refresh(i)
     goto continue 
 end
  if tButtons.text == "X" then
    for n=1,#tButtons do
    gpu.setBackground(0x00000)
    gpu.setForeground(0xffffff) 
    gpu.fill(0, 0, W, H, ' ') 
end 
   os.exit()
end
 
     ::continue::  
end
      end
end

Его задача: нажать на кнопку и после 120 секунд он выдаёт красный сигнал
но не в этом суть...
как сделать так что бы os.sleep(120) не ждала вся система
а ждал только сам таймер
( просто после нажатия на кнопку "start" кнопка остаётся прежней, но только по истечению 120 секунд она меняется на "stop" )
 

Изменено пользователем _bongo_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Если дело только в надписи, то sleep() нужно делать после обновления надписи:

   if tButtons.text == "start" then
    tButtons.text = "stop"
    refresh(i)
    os.sleep(120)
    rs.setOutput(1,15)
    goto continue
    end

Если же нужно делать еще что либо в течении этих 120-ти секунд, используйте event.timer

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

тут ещё кое-что передали:

Нет, дело в том, что у меня есть кнопка выхода из программы и мне надо, чтобы она работала даже во время ожидания. Были попытки сделать через thread, но выполнения os.sleep() ждёт вся система. Следовательно мне надо заменить os.sleep() на функцию, которую не ждёт вся система, а только основной поток. Вопрос: как сделать такую функцию?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добавил в свое прежнее сообщение про таймер. Так же рекомендую ознакомиться с какой либо из GUI-библиотек на форуме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
53 минуты назад, Zer0Galaxy сказал:

Добавил в свое прежнее сообщение про таймер. Так же рекомендую ознакомиться с какой либо из GUI-библиотек на форуме.

спасибо, всё работает

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...